带复选框的Rails HABTM

时间:2012-10-18 17:24:18

标签: ruby-on-rails ruby-on-rails-3.2

我有三个表,帐户,广告系列和accounts_campaigns。我希望在广告系列修改表单中为选定帐户设置复选框。

我有这样的广告模型:

class Campaign < ActiveRecord::Base
  has_and_belongs_to_many :accounts
  accepts_nested_attributes_for :accounts
end

我认为我不需要在帐户上定义关系。

我的表格是:

= hidden_field_tag "campaign[accounts_ids][]", nil
  - Account.all.each do |account|
    %label.checkbox
      = check_box_tag "campaign[accounts_ids][]", account.id, @campaign.account_ids.include?(account.id),
      id: dom_id(account)
      = "#{account.name} - #{account.email}"

但是我收到了这个错误:

unknown attribute: accounts_ids

1 个答案:

答案 0 :(得分:2)

好吧,最后我明白了,没有必要使用has_many:通过尽可能多的人推荐,这是最简单的设置,我认为可以为HABTM上的选择项添加复选框(已经属于许多,很多有很多关系。

总结一下,我希望在Campaig上设置复选框,以选择广告系列将使用的帐户。

首先,在您要添加复选框的表单的模型上

class Campaign < ActiveRecord::Base
  has_many :mail_sequences, order: 'step'
  has_and_belongs_to_many :accounts
  accepts_nested_attributes_for :accounts
end

第二,无需在其他模式(帐户)上创建关系

第三,在表单上,​​这是haml,(这可能会被优化):

  = hidden_field_tag "campaign[account_ids][]", nil
  - Account.all.each do |account|
    %label.checkbox
      = check_box_tag "campaign[account_ids][]", account.id, @campaign.account_ids.include?(account.id),
      id: dom_id(account)
      = "#{account.name} - #{account.email}"