[解決済み] Rails: has_oneアソシエーションで作成する
2022-11-17 14:02:04
質問
こんにちは(Railsの超初心者です)、以下のモデルを持っています。
class Shop < ActiveRecord::Base
belongs_to :user
validates_uniqueness_of :title, :user_id, :message => "is already being used"
end
と
class User < ActiveRecord::Base
has_one :shop, :dependent => :destroy
end
新しいショップを作ろうとすると、以下のようなエラーが発生します。
private method `create' called for nil:NilClass
これは私のコントローラです。
@user = current_user
@shop = @user.shop.create(params[:shop])
あちこちのガイドやチュートリアルを読んでいろいろなバリエーションを試しましたが、以前より混乱していて、うまくいきません。何か助けがあれば、非常にありがたいです。
どのように解決するのですか?
まず、やりたいことをやる方法を紹介します。
@user = current_user
@shop = Shop.create(params[:shop])
@user.shop = @shop
さて、あなたのバージョンがうまくいかなかった理由はここにあります。
おそらくあなたは、もしユーザが
has_many
の関係で、Shop に
@user.shops.create(params[:shop])
となる
のように動作します。しかし
has_many
の関係と
has_one
の関係で構成されています。
を持つ
has_many
の関係で
shops
はActiveRecordのコレクションオブジェクトを返します。このオブジェクトには、ユーザーへのショップの追加や削除に使用できるメソッドがあります。それらのメソッドのひとつは
create
で、これは新しいショップを作成し、ユーザーに追加します。
を使用すると
has_one
リレーションでは、そのようなコレクションオブジェクトは返されず、単にユーザーに属する Shop オブジェクト、あるいはユーザーがまだショップを持っていない場合は nil が返されます。Shop オブジェクトも nil も
create
メソッドを持っていないので
create
をこの方法で使うことはできません。
has_one
の関係になります。
関連
-
[解決済み】OS X Yosemite 10.10.5 で [Ruby on Rails] 5 をインストールすると extconf が失敗して終了コード 1 エラーになる。
-
[解決済み] Mac OS Xにhomebrewがインストールされているかどうかを確認する方法
-
[解決済み] Rails ExecJS::ProgramError in Pages#home?
-
[解決済み] Herokuの問題 : あなたが探しているページは存在しません。
-
[解決済み] Devise Admin Roleの追加【終了しました
-
[解決済み] "render :nothing => true" は空のプレーンテキストファイルを返すのですか?
-
[解決済み] Heroku: 既存のrailsアプリにseeds.rbをプッシュする方法?
-
[解決済み] railsでcheck_boxをcheckedにする方法は?
-
[解決済み] Ruby on Railsのマイグレーションでデータベースのカラムの名前を変更するにはどうすればよいですか?
-
[解決済み】Railsの認証トークンを理解する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】なぜRuby on Railsは、http://localhost:3000 の代わりに http://0.0.0.0:3000 を使用するのですか?
-
[解決済み] 該当するルートがない [GET] "demo/hello"
-
[解決済み] どなたか、collection_selectをわかりやすく説明していただけませんか?
-
[解決済み] Paramが無いか、値が空である。ParameterMissing in ResultsController#update
-
[解決済み] 検索 vs 発見する by vs どこに
-
[解決済み] Rails ExecJS::ProgramError in Pages#home?
-
[解決済み] Railsで `before_action` での `only:` はどのように機能するのですか?
-
[解決済み] railsでhidden fieldタグを使用する方法
-
[解決済み] 属性を割り当てる場合、引数としてハッシュを渡す必要がある
-
[解決済み] Railsです。railsでhas_oneアソシエーションを使ったbuildの使い方