Область применения Rails с несколькими аргументами
В моей модели offer.rb я делаю некоторую фильтрацию после клиентов, у которых есть эти предложения. Но я хочу иметь возможность передавать другой параметр в моей области поиска, например, по возрасту клиента или около того.
Это то, что у меня сейчас есть в моей модели предложения:
scope :with_client_id, lambda { |client_id| where(:client_id => client_id) }
По мнению:
<%= f.select(:with_client_id, options_for_select(current_partner.clients.collect{|c| [c.name, c.id]}), { include_blank: true}) %>
Как я могу передать возраст клиента за слово в этой области?
Спасибо!
2 ответа
Два варианта
Используя "сплат"
scope :with_client_id_and_age, lambda { |params| where(:client_id => params[0], :age => params[1]) }
И тогда вам придется позвонить с:
Offer.with_client_id_and_age( client_id, age )
Использование хэша params
scope :with_client_id_and_age, lambda { |params| where(:client_id => params[:client_id], :age => params[:age]) }
И тогда вам придется позвонить с:
Offer.with_client_id_and_age( { client_id: client_id, age: age } )
Я оставил область действия без изменений и просто изменил выбор в представлении:
<%= f.select(:with_client_id, options_for_select(current_partner.clients.collect{|c| [c.name_and_age, c.id]}), { include_blank: true}) %>
С помощью метода name_and_age в контроллере клиентов:
def name_and_age
[name, age].compact.join " "
end
Я также могу указать возраст в поле select2, чтобы создать фильтр.