7

I'm having problems building an association that is a has_many :through with conditions. I have this model:

class Contact < AR
  has_many :group_contacts
  has_many :groups, :through => :group_contacts, :conditions => {:groups => {:published => true}}
end

problem happens when I try to instantiate a group from a contact. With the above syntax, I get an error:

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

But when I use the following syntax it works:

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>

I see a reference to the exact problem in this question. It is said a ticket would be filed for this bug (back in pre- rails 3 versions). I can't find anything however on rails 3.0.x.

I'm using 3.0.8. Has anyone else found this issue?

Further Notes:

I've also found that when I'm building groups, it actually ignores my conditions on the association when building. The only reason my above build had published => true is because it's the default in the db.

This seems like a regression, can anyone else verify this?

Community
  • 1
  • 1
brad
  • 31,987
  • 28
  • 102
  • 155
  • 1
    Is it possible you meant: `has_many :groups, :through => :group_contacts, :conditions => {:groups => {:published => true}}` ? – dwhalen Aug 15 '11 at 18:00

1 Answers1

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

or

has_many :groups, :through => :group_contacts, :conditions => {"groups.published" => true}
fl00r
  • 82,987
  • 33
  • 217
  • 237
  • ah right... i'm totally used to having conditions on other joined models ie `:conditions => {:some_model => {:attr => true}}`, but I guess when the conditions are on the actual `has_many` model, you don't need to specify it. thx – brad Aug 18 '11 at 17:32