Rails 4 позволяет вам обменивать связь has_many
следующим образом:
class Customer < ActiveRecord::Base
has_many :orders, -> { where processed: true }
end
Поэтому в любое время вы customer.orders
получаете обработанные заказы.
Но что, если мне нужно сделать условие where
динамическим? Как передать аргумент в область лямбда?
Например, я хочу, чтобы только заказы отображались для учетной записи, к которой клиент в настоящее время входит в систему с несколькими арендаторами.
Вот что у меня есть:
class Customer < ActiveRecord::Base
has_many :orders, (account) { where(:account_id => account.id) }
end
Но как в моем контроллере или представлении я могу передать правильную учетную запись? С кодом выше на месте, когда я делаю:
customers.orders
Я получаю все заказы на учетную запись с идентификатором 1, кажущимся произвольным.