我有一个 Rails 3 项目。Rails 3 带来了 Arel 和重用一个范围来构建另一个范围的能力。我想知道在定义关系(例如“has_many”)时是否有使用范围的方法。
我有具有权限列的记录。我想构建一个将我的权限列考虑在内的 default_scope,以便过滤记录(即使是通过关系访问的记录)。
目前,在 Rails 3 中,default_scope(包括我找到的补丁)不提供传递 proc 的可行方法(我需要后期变量绑定)。是否可以定义一个可以传递命名范围的 has_many ?
重用命名范围的想法如下:
Orders.scope :my_orders, lambda{where(:user_id => User.current_user.id)}
has_many :orders, :scope => Orders.my_orders
或者隐式编码关系中的命名范围如下所示:
has_many :orders, :scope => lambda{where(:user_id => User.current_user.id)}
我只是想将 default_scope 与后期绑定一起应用。我更喜欢使用 Arel 方法(如果有的话),但会使用任何可行的选项。
由于我指的是当前用户,因此我不能依赖在最后一刻未评估的条件,例如:
has_many :orders, :conditions => ["user_id = ?", User.current_user.id]