Rails has_many:通过条件和建立关联

时间:2011-08-15 16:46:54

标签: ruby-on-rails ruby-on-rails-3 activerecord has-many-through

我在构建具有条件的has_many :through关联时遇到问题。我有这个模型:

class Contact < AR
  has_many :group_contacts
  has_many :groups, :through => :group_contacts, :conditions => {:groups => {:published => true}}
end
当我尝试从联系人实例化一个组时,会出现

问题。使用上面的语法,我收到一个错误:

contact.groups.build
=> ActiveRecord::UnknownAttributeError: unknown attribute: groups

但是当我使用以下语法时,它可以工作:

has_many :groups, :through => :group_contacts, :conditions => ['groups.published = ?', true]

contact.groups.build
=> #<Group id: nil, name: nil, description: nil, created_at: nil, updated_at: nil, published: true>

我在this question中看到了对确切问题的引用。据说将为此错误提交一张票(返回前3版本)。我在rails 3.0.x找不到任何东西。

我正在使用3.0.8。还有其他人发现了这个问题吗?

进一步说明

我还发现,当我建立群组时,它实际上忽略了我在构建时的关联条件。我上面构建published => true的唯一原因是因为它是db中的默认值。

这似乎是回归,其他任何人都可以验证这个吗?

1 个答案:

答案 0 :(得分:9)

has_many :groups, :through => :group_contacts, :conditions => {:published => true}

has_many :groups, :through => :group_contacts, :conditions => {"groups.published" => true}