2017-05-28 3 views
0

フォームで参照する必要がある多対多のリレーションシップを持つネームスペースリソースで動作するようにform_forを取得できない場合があります。form_for多対多リレーションシップを持つ名前空間付き

ストレッチは多くの身体領域に影響を及ぼし、身体領域は多くのストレッチを持つことができます。ここで

は、リソースです:

namespace :admin do 
    resources :stretches, only: [:new, :create, :edit, :update, :destroy] 
    resources :body_areas, only: [:new, :create] 
end 

は、ここでのform_forです:

<%= form_for [:admin, @stretch, @body_area] do |f| %> 
    <%= f.label :name %> 
    <%= f.text_field :name %> 

    <%= f.label :body_area_id %> 
    <%= f.collection_select :body_area_id, BodyArea.all, :id, :name, prompt: 'Select a Body Area' %> 

    <%= f.submit %> 
<% end %> 

そして、私のコントローラ:

def new 
    @stretch = Stretch.new 
    @body_area = BodyArea.all 
    end 

私は取得していますエラーは次のとおりです。

ActionView::Template::Error: 
    undefined method `to_key' for #<ActiveRecord::Relation [#<BodyArea id: 1, name: "Legs 1">]> 

誰かが私を助ける提案はありますか?あなたの時間の前にありがとう!

答えて

0

ActionView::Template::Error: undefined method `to_key' for ActiveRecord::Relation BodyArea id: 1, name: "Legs 1"

私はこのエラーが@body_area = BodyArea.allであると考えています。それは@body_area = BodyArea.new

def new 
    @stretch = Stretch.new 
    @body_area = BodyArea.new 
end 

しかし、あなたのルートごとに、あなたのフォームが間違っている必要があります。 新しいストレッチを作成しているようです。そうですね、あなたのフォームは次のようになります

<%= form_for [:admin, @stretch] do |f| %> 
    <%= f.label :name %> 
    <%= f.text_field :name %> 

    <%= f.label :body_area_id %> 
    <%= f.collection_select :body_area_id, BodyArea.all, :id, :name, prompt: 'Select a Body Area' %> 

    <%= f.submit %> 
<% end %> 
+0

私は新しいBodyAreaを作成しようとしていません。私は身体領域のリストを参照して、このストレッチが属する領域を選択したいと考えています。私のform_forのパラメータに@body_areaが含まれていないと、私のフォームはドロップダウンメニューで何を話しているのか分かりません。 –

+0

@KristenSqueeMueller 'collection_select'に' BodyArea.all'があるので、それは分かります。あなたは '@body_area = BodyArea.new'を無用に削除することができます – Pavan

関連する問題