【发布时间】:2014-06-01 02:16:40
【问题描述】:
Rails 4 让您可以像这样限定has_many 关系:
class Customer < ActiveRecord::Base
has_many :orders, -> { where processed: true }
end
因此,无论何时您使用customer.orders,您都只会得到已处理的订单。
但是如果我需要使where 条件动态化怎么办?如何将参数传递给范围 lambda?
例如,我只想为客户当前在多租户环境中登录的帐户显示订单。
这是我得到的:
class Customer < ActiveRecord::Base
has_many :orders, (account) { where(:account_id => account.id) }
end
但是,如何在我的控制器或视图中传递正确的帐户?当我这样做时,上面的代码已经到位:
customers.orders
我得到了 ID 为 1 的帐户的所有订单,这似乎是任意的。
【问题讨论】:
-
这样的?
scope:account lambda {|account| {:conditions => {:account_id => account}}}并查看此 SO stackoverflow.com/questions/16203576/… -
@Pavan 在我的案例中,关键区别在于需要传递的值不是来自另一个模型的值,而是只有控制器知道的(即当前帐户)。
标签: ruby-on-rails associations scopes