У меня есть модель Story с атрибутом :category. Story также находится в отношениях HABTM с Tag.
class Tag < ActiveRecord::Base
has_and_belongs_to_many :stories, :uniq => true
validates :name, :presence => true
validates :creator_id, :presence => true
end
class Story < ActiveRecord::Base
attr_accessible :title, :category
belongs_to :user
has_and_belongs_to_many :tags, :uniq => true
end
Я хочу искать истории, которые либо (i) имеют категорию в переданном массиве category_array, либо (ii) имеют связанное имя тега, которое находится в переданном массиве тегов.
Первая часть прямолинейна:
Story.where(:category => category_array)
Это вторая часть, которая расширяет мои возможности. Любая помощь будет принята с благодарностью!
ОБНОВЛЕНИЕ
Это решает проблему и довольно легко читается, но лучший ли это подход? Кстати, я думал об использовании arel, но я до сих пор не понимаю, как я буду использовать arel в таблице соединений:
Story.includes(:tags).where("tags.name in (tag_array) OR category in (cat_array)")