0

我有一个需要 0、1 或 2 个联系人的锦标赛模型。我创建了一个 Contact 模型并设置has_many :contacts在 Tournament 和belongs_to :tournamentContact 上。锦标赛accepts_nested_attributes_for :contacts

但是,当我为锦标赛构建表单时,我不太明白应该如何做。我正在考虑要两个fields_for :contacts,但感觉很乱。我还考虑过在 Tournament 模型上有两个特定属性(类似于primary_contactsecondary_contact),但我不确定如何做到这一点。

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

我在 Rails 3.1 顺便说一句。

4

3 回答 3

2

fields_for :contacts是正确的方法。

利用这样一个事实,如果tournament.contacts有多个项目,那么一个项目fields_for :contacts将显示多个字段集。

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

于 2012-05-09T08:45:56.870 回答
1

我认为您不应该限制 2 个字段的联系人,因为我认为您应该保留以后为锦标赛添加更多联系人的灵活性

我在 Project 和用户之间做了一个小例子(通过使用复选框),你可能会明白

https://github.com/sameera207/HABTMsample

于 2012-05-09T09:37:43.227 回答
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

于 2012-05-09T08:36:49.430 回答