has_many
Rails 4 では、次のように関係をスコープできます。
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
ID が 1 のアカウントのすべての注文を、一見恣意的に受け取ります。