2013-12-18 68 views
1

我有一個User,它有很多Profession,Occupation正在連接這兩個。在多對多關係中選擇標籤不顯示

我試圖用bulder在@user中顯示一個選擇菜單,其中包含可用的職業。

要調試我已經試過以下三個變化,但不包含代碼都被渲染(該表格的其餘部分沒有問題):

<%= f.fields_for :occupations do |builder| %> 
    <%= builder.collection_select(:profession_id, Profession.all, :id, :title) %> 
    <%= bulder.select :profession_id, Profession.all.collect {|p| [ p.name, p.id ] }, { include_blank: true })) %> 
<% end %> 

<%= select("occupation", "profession_id", Profession.all.collect {|p| [ p.title, p.id ] }, { include_blank: true }) %> 

我應該怎麼做是錯在這裏幹什麼?我沒有得到任何錯誤,我只是沒有得到任何html的選擇標籤。

這裏是我的模型:

class User < ActiveRecord::Base 
    has_many :occupations, dependent: :destroy 
    has_many :professions, through: :occupations 
    accepts_nested_attributes_for :occupations 
end 

class Profession < ActiveRecord::Base 
    has_many :occupations, dependent: :destroy 
    has_many :users, through: :occupations 
end 

class Occupation < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :profession 
end 

回答

0

的fields_for:職業呈現什麼最有可能的,因爲@user.occupations是空的。而你最有可能的意思是Profession而不是你的代碼的第3行中的Person

要解決這個問題,你可以在你的控制器中做@user.occupations.build,這樣你的fields_for塊應該呈現html。

+0

我做到了這一點,現在*發生了一些事情 - 不知道它是好還是壞。重新加載時,我得到以下錯誤「未定義的方法'occupations_path'」。我知道這是一個單獨的問題,但爲什麼它似乎呈現一個職業_道路? –

+0

@FellowStranger幾乎可以肯定它試圖爲'fields_for'創建目標路徑,並發現沒有路由幫助程序可以這樣做。使用'rake routes'來弄清楚發生了什麼。 'fields_for'目標必須匹配Occupation控制器的'PUT'和'POST'方法。 – Gene

+0

感謝您的輸入,儘管我對'fields_for'部分需要單獨路由非常困惑 - 並不是使用'fields_for'來指示相關模型嵌套到主窗體對象('@ user') )並繼承它的'路由? –