У меня есть модель Категория, которая has_many Продукты и Продукт, в свою очередь has_many Категории. Когда пользователь ищет категорию, я хотел бы вернуть продукты соответствующих категорий без потери объекта Arel. Вот то, что я до сих пор:Как выбрать только связанные объекты в запросе Rails «where»?
Category.where("upper(title) like ?", search_term.upcase).map {|category| category.products}.flatten
Это делает трюк возвращения продуктов, но, конечно, что у меня есть массив, а не Арел. Я могу дойти до добавления предложения :includes(:products)
, поэтому я действительно вернул продукты, но я все еще привязываю их к их категориям. Как настроить свой запрос так, чтобы все, что я вернусь, это Arel, который обращается только к продуктам?
[ «Использование метода класса является предпочтительным способом принимать аргументы для областей»] (http://guides.rubyonrails.org/active_record_querying.html#passing-in-arguments), но это, в основном, nit picking. –
Спасибо, это хороший момент. – DanneManne
Только для записи: 'def self.in_categories_like (search_term); join (: categories) .where ("upper (categories.title) like?", search_term.upcase); end'. –