Область применения 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, чтобы создать фильтр.

Другие вопросы по тегам