在范围内传递参数

时间:2011-07-22 09:40:38

标签: ruby-on-rails ruby-on-rails-3

有人可以举例说明如何使用

scope

和参数?

例如:

class Permission < ActiveRecord::Base
  scope :default_permissions, :conditions => { :is_default => true }
end

我有这个代码返回default_permissions,我想将其转换为返回给定用户的默认权限(user_id)

由于

2 个答案:

答案 0 :(得分:81)

新语法(ruby 1.9+),即使您不提供用户也可以防止错误 -

scope :default_permissions_for, ->(user = nil) { ... }

答案 1 :(得分:38)

使用lambda范围:

scope :default_permissions_for, lambda{|user| { :conditions => { :user_id => user.id, :is_default => true } }

要小心,因为在预期会引发异常时,不会将参数传递给lambda。