前提・実現したいこと
あるテーマに仮説を立てるアプリを作成しています。
あるテーマに紐づく仮説をネストの関係でルーティングしていますが、
仮説のupdateアクションでエラーが発生してしまいます。
コントローラの記述に誤りがあると推測していますが、そこでつまづいてしまっています。
すみませんが、ご教授いただきたくよろしくお願いします。
発生している問題・エラーメッセージ
ActiveRecord::AssociationNotFoundError in GuessesController#update Association named '2' was not found on Guess; perhaps you misspelled it?
- エラー発生時のParameter
{"_method"=>"patch", "authenticity_token"=>"9gsX0/ZOLwpR+/LBLrpDQ6alhQMwyzsefjy6+ZgtwtALEVBFVzlhyzbRKZJMCT5srUmCS1kFRPzC+cJq0VR7nw==", "guess"=>{"story"=>"gess1-2 new"}, "commit"=>"保存する", "moyatto_id"=>"1", "id"=>"2"}
該当のソースコード
- guesses_contorollerの記述
ruby
1 def update 2 @moyatto = Moyatto.find(params[:moyatto_id]) 3 @guesses = @moyatto.guesses.includes(params[:id]) 4 binding.pry 5 @guess = @guesses.update(guess_params) 6 end 7 8 private 9 def guess_params 10 params.require(:guess).permit(:story).merge(user_id: current_user.id,moyatto_id: params[:moyatto_id]) 11 end
- ルーティング
resources :moyattos, only:[:new,:create,:show,:edit,:update,:destroy] do resources :guesses, only:[:new,:create,:edit,:update] end
- 各Modelとのアソシエーション
# Guessモデル belongs_to :user belongs_to :moyatto # Moyattoモデル belongs_to :user has_one_attached :image has_many :guesses # Userモデル devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable has_many :moyattos has_many :guesses
- VIew edit.html.erb
<%= form_with model:[@moyatto,@guess], local: true do |f| %> <p>仮説を登録</p> <%= f.text_area :story %> <%= f.submit "保存する" %> <% end %>
試したこと
- guess_paramsに
id: params[:id]
をmergeしてみましたが、エラーは変わりませんでした。
補足情報(FW/ツールのバージョンなど)
- binding_pryの時のguess_paramsの内容
=> <ActionController::Parameters {"story"=>"gess1-2 new", "user_id"=>1, "moyatto_id"=>"1", "id"=>"2"} permitted: true>
updateに @guesses = @moyatto.guesses.、、、 とありますが、ある一つのguessをupdateするのだとおもいますが違いますか?
とすると @moyatto.guesseからどうやって選ぶのかその条件をおしえてください
ありがとうございます。おっしゃる通りでmoyattoに紐づく、guessの中から1つをupdateしたいです。
選ぶ記述は、'.includes(params[:id])' で今持っているidから取得して @guessesへ入れ、これにupdateの情報を渡したいと思っています。
paramsにidが入っており、取得可能と思いました。
viewがないので判断できませんが、この id はguessのidなのですか?
ソースコードにviewを追加いたしました。
この内容からguessのidだと思っています。
(違うでしょうか?)
合ってます。
回答1件
あなたの回答
tips
プレビュー