2012-05-09 46 views
0

我有一个锦标赛模型需要0,1或2个联系人。我创建了联系人模型,并在联系人上设置了has_many :contacts,在联系人上设置了belongs_to :tournament。比赛accepts_nested_attributes_for :contacts在Rails中限制属性

但是,当我为锦标赛构建表格时,我不太明白我该怎么做。我正在考虑有两个fields_for :contacts,但感觉混乱。我还考虑过在锦标赛模型中有两个特定的属性(沿着primary_contactsecondary_contact行),但我不确定如何做到这一点。

有没有“正确”的方法来做到这一点?有什么建议么?

我在轨道3.1顺便说一句。

回答

2

fields_for :contacts是正确的道路要走。这样的事实,如果tournament.contacts有多个项目,然后单fields_for :contacts会显示多个字段集

利用。

然后利用tournament.contacts.build将创建未保存的Contact并将其添加到contacts集合的事实。如果您在显示表单前在控制器中执行此操作,那么您的fields_for将显示此空接触并正确使用它的嵌套属性

+0

的伟大工程。这也简化了我的代码,解决了错误发生时表单的联系人部分未填充值的另一个问题。 – fiskeben

0

我建议也许增加一个非持久性contact_list属性,然后根据需要用逗号分隔成一个字段,你可以输入尽可能多的接触:

has_many :contacts 
attr_accessor :contact_list 

def contact_list=value 
    value.split(',').each do |email| 
    self.contacts.build(:email => email).save 
    end 
end 

def contact_list 
    self.contacts.join(',') 
end 

如果您需要输入每个更多信息联系(不只是名称,电子邮件或电话号码),那么您将需要更多的领域。

以下railscast可以帮助你:

http://railscasts.com/episodes/196-nested-model-form-part-1

1

我认为您不应该限制2个字段的联系人,因为我认为您应该保留增加对比赛更多的接触的灵活性后来

我做了一个小例子(通过使用复选框)项目之间的用户,你也许能够得到的想法

https://github.com/sameera207/HABTMsample