Я делаю страницу поиска для своей службы, и она включает в себя несколько параметров поиска, основанных на ассоциации, я могу придумать несколько беспорядочных SQL-запросов, но предпочел бы некоторые уборщик подходы, в качестве образца,Запросы Rails, которые состоят из подсчетов по ассоциациям, желательно с областями
class Person < ActiveRecord::Base
has_many :friends
end
Друг имеет атрибут, который указывает на состояние дружбы, то вроде friend_type
class Friend < ActiveRecord::Base
belongs_to :person
end
форма поиска будет состоять из многих параметров, два из них поиск людей, которые имеют больше, чем ac определенное количество друзей, и сколько людей имеют друзей, у которых есть функция friend_type, например «bff».
То, что я хотел бы сделать, это есть некоторые методы, области применения в модели, и в контроллере быть в состоянии сделать это,
некоторые модели прицелы в лицо, как это,
scope :by_friends_count_greater_than, lambda { |value| joins(:friends).where(#count friends#, value) if value }
scope :by_bff_count_greater_than, lambda { |value| joins(:friends).where(##count friends with bff status## , value) if value }
и вызов их в контроллере, как это так,
@people = Person.by_friends_count_greater_than(params[:query][:friends_count])
.by_bff_count_greater_than(params[:query][:bff_count])
Я пытался из squeel, который, кажется, очень хороший актив, учитывая, что может вызвать методы в запросе. Возможно ли, чтобы поисковые запросы выполнялись таким образом?
Если есть лучший способ приблизиться к этому, это было бы очень оценено.
Это способ, которым я не думал о том, спасибо за совет. Это будет работать с подсчетом обычных друзей, но это не сработает для подсчета друзей с определенными атрибутами, установленными для них, если я правильно понимаю кеширование счетчиков. – Saifis
Нет, но способ работы счетчиков кешей может быть ручной работы для эффективных запросов. Если нужно – yannick