在范围内传递参数

gla*_*kou 44 ruby-on-rails ruby-on-rails-3

有人可以提供一个如何使用的例子

scope
Run Code Online (Sandbox Code Playgroud)

和参数?

例如:

class Permission < ActiveRecord::Base
  scope :default_permissions, :conditions => { :is_default => true }
end
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Nur*_*iel 81

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

scope :default_permissions_for, ->(user = nil) { ... }
Run Code Online (Sandbox Code Playgroud)


key*_*one 38

使用lambda范围:

scope :default_permissions_for, lambda{|user| { :conditions => { :user_id => user.id, :is_default => true } }
Run Code Online (Sandbox Code Playgroud)

要小心,因为它没有将参数传递给lambda,因为它期望会引发异常.

  • 在ruby 1.9中的@keymone你可以为lambda参数设置一个默认值,以避免你所指的那些错误.所以这将是lambda {| user = nil | { :条件...... (8认同)