0

私はdevise gemでロールベースの認証を行っています。すべてのユーザーは多くのロールを持つことができ、current_user のユーザー ロール スラッグだけを取得するにはどうすればよいですか?

今私の User.rb モデルで get_role というメソッドを作成しました

ユーザー.rb

def get_role
  roles.each { |role| role.slug.downcase }
end

私はそのようなビューでこのメソッドを呼び出します

current_user.get_role

そして、これを返します:

[#<Role id: 3, name: "Seller", created_at: "2013-01-10 21:04:46", updated_at: "2013-01-10 21:04:46", slug: "Venditore">]

なぜそのメソッドの各ブロックを呼び出すのですか? ありがとう

4

1 に答える 1

1

map各メソッドのドキュメント)の代わりに(マップメソッドのドキュメント)を使用します。each

def get_role
  roles.map { |role| role.slug.downcase }
end

each戻り値を使用してコレクションを反復処理すると、コレクション自体になります。eachイテレータは、各要素で何かを行うためのものです。eachそして、そのプロパティにより、メソッド呼び出しのチェーンを記述できます。

workers.each{ |w| w.take_a_break }.each{ |w| w.just_joke_go_to_work }

あまり賢い例ではありません。次のことを行う可能性があるためです。

workers.each{ |w| w.take_a_break; w.just_joke_go_to_work }

しかし、ほんの一例です。

于 2013-02-21T10:37:37.880 に答える