0

我在 Rails 3.2 应用程序中使用 cancan,并且在abilities.rb 类中为每个角色的能力提供了一个方法

#ability.rb

def initialize(user)
  user_or_admin ||= User.new

  user.roles.each do |role| 
    send(role.name)
  end
end

def role_name_a

end

def role_name_b

end

其中一些方法需要访问用户记录,我如何使用发送函数传递它?

例如,我想做类似的事情

send(role.name)(user)

接着

def role_name_a(user)

但这不起作用。感谢任何想法。

4

2 回答 2

2

参数是 的第二个参数send。第一个参数是作为符号的方法名称。

send :"#{role.name}", user

您应该尝试查看 Ruby 的文档以了解此类问题。该语言有据可查。

http://ruby-doc.org/core-1.9.3/Object.html#method-i-send

于 2013-02-16T03:56:11.023 回答
0

我不确定这是否是最佳做法,但它是 cancan 文档中的内容。

def initialize(user)
  @user = user || User.new

  user.roles.each do |role| 
    send(role.name)
  end
end

def role_name_a
  can :manage, User, id: @user.id
end

def role_name_b

end
于 2013-02-16T03:58:32.993 回答