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

相關問題