我有一个 Rails 3 项目。 Rails 3 带来了 Arel 以及重用一个范围来构建另一个范围的能力。我想知道在定义关系时是否有办法使用范围(例如“has_many”)。
我有带有权限列的记录。我想构建一个 default_scope 来考虑我的权限列,以便过滤记录(甚至是通过关系访问的记录)。
目前,在Rails 3中,default_scope(包括我发现的补丁)没有提供传递过程(我需要后期变量绑定)的可行方法。是否可以定义一个可以将命名范围传递到其中的 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]