HABTM Relationship -- How Can I Find A Record Based On An Attribute Of The Associated Model
You need to include the interests table.
@events = Event.all(:include => :interests, :conditions => ["interests.id = ?", 4])
You had it right in your post, but you didn't pluralize interests.
Update
Because this answer is still getting attention, I thought it might be a good idea to update it using ActiveRecord::Relation
syntax since the above way is going to be deprecated.
@events = Event.includes(:interests).where(interests: { id: 4 })
or
@events = Event.includes(:interests).where('interests.id' => 4)
And in case you want a custom condition
@events = Event.includes(:interests).where('interests.id >= 4')
The answer was helpful, thanks! I know this post is old, but I came up with a different solution that might be useful to someone. I noticed the query generate was quite long in my case. For me the table that was equatable to your "interests" table had a lot of columns and data in it. To avoid searching that table for the matching id, my solution looked similar to this:
@events = Event.all.where('events.id' => @interest.events.each(&:id))
This worked for me since I already had an instanced @interest object with the list of ids for the events. Of course you're not using some of the magic the rails has available. Also, I couldn't get your solution to work with "not". For example;
@events = Event.includes(:interests).where.not(interests: { id: 4 })
would not work. It would return 0 results. But this:
@events = Event.all.where.not('events.id' => @interest.events.each(&:id))
would work, which would return all the the events that don't have an association with @interest.