0

我使用 devise gem 进行基于角色的身份验证;所有用户都可以有很多角色,我怎样才能只检索 current_user 的用户角色 slug?

现在在我的 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">]

为什么在该方法中调用 each 块?谢谢

4

1 回答 1

1

使用map( doc for map method ) 而不是each( doc for each method ):

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 回答