Вот что я хотел бы использовать:
User.joins(:forums).where("forums.title IN (?)", %w(sport TV Hobby)).group("users.id")
Я предположил, что столбец для заголовка форума - это «заголовок». Измените это, когда вы используете другое имя. Вы можете поместить это в удобную область внутри пользовательской модели, чтобы сделать ее немного более динамичной.
scope :subscribed_to, lambda { |forum_titles| joins(:forums).where("forums.title IN (?)", forum_titles).group("users.id") }
Теперь вы можете вызвать эту область изнутри Контроллера или другого места:
User.subscribed_to(%w(sport TV Hobby)) # => Get all users that are subscribed to sport, TV and Hobby
User.subscribed_to(["sport", "TV", "Hobby"]) # => Does the same
User.subscribed_to(%w(Hobby)) # => Get all users that are subscribed to Hobby
User.subscribed_to("Hobby") # => Does the same
Я предполагал, что у вас есть следующие отношения:
class User < ActiveRecord::Base
has_many :forum_subscriptions
has_many :forums, :through => :forum_subscriptions
end
class Forum < ActiveRecord::Base
has_many :forum_subscriptions
has_many :users, :through => :forum_subscriptions
end
class ForumSubscription < ActiveRecord::Base
belongs_to :user
belongs_to :forum
end
Надеюсь, это то, что вам нужно. :)