窓際BLOG

プログラミングの学習メモや書籍の感想等を公開していきます。

Ruby on Rails:form_forでundefined method `to_key'が出続けてハマった話

f:id:madogiwa0124:20170729104257p:plain

あるモデルに紐づくモデルの登録を'form_for'を使って行おうとしたところ、下記エラーが出続けてハマったので対応策をメモφ(..)

ActionView::Template::Error at /
undefined method `to_key' for #<Favorite::ActiveRecord_AssociationRelation:0x007fcefaa056b0>
Did you mean?  to_set to_ary

原因

紐づくモデルの取得をmodel.childmodel.whereで行っていたことが原因。
whereメソッドは、モデルのインスタンスではなく、ActiveRecord::Relationを返却するため適切にフォームを作成できなった。

修正前のソースコード

  <% favorite = page.favorite.where(user_id: current_user.id) %>
  <%= form_for favorite, method: "delete", class: "form-inline" do |f| %>
    <%= f.submit "" %>
  <% end %>

解決策

モデルのインスタンスを返却するfind_byメソッドを使って取得するように変更。

修正後のソースコード

  <% favorite = page.favorite.find_by(user_id: current_user.id) %>
  <%= form_for favorite, method: "delete", class: "form-inline" do |f| %>
    <%= f.submit "" %>
  <% end %>

参考ページ

Active Record クエリインターフェイス railsguides.jp