2017-05-28 92 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 

然而,按您的路线,你形式是错误。看起来你正在创建一个新Stretch。如果是这样,你的表格应该看起来像这样

<%= 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它知道,因为''body_rea.all'为'collection_select'。你可以删除'@body_area = BodyArea.new',因为它没用 – Pavan

相关问题