I have setup this HABTM relationship in the past and it has worked before....Now it isn\'t and I\'m at my wits end trying to figure out what\'s wrong. I\'ve looked
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.