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関数でそれを渡すにはどうすればよいですか?

例:私は次のようなことをしたい

send(role.name)(user)

その後

def role_name_a(user)

しかし、これは機能しません。どんなアイデアにも感謝します。

4

2 に答える 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 に答える