2013-12-18 49 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') )并继承它的'路由? –