我在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函数传递它?
e.g。我想做像
这样的事情 send(role.name)(user)
然后
def role_name_a(user)
但这不起作用。感谢任何想法。
答案 0 :(得分:2)
参数是send
的第二个参数。第一个参数是方法名称作为符号。
send :"#{role.name}", user
你应该尝试查看Ruby的文档来解决这个问题。语言记录良好。
答案 1 :(得分:0)
我不确定这是否是最佳做法,但它是康康文档中的内容。
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