【问题标题】:how get user roles's slug in rails for the current_user如何为 current_user 获取用户角色的 slug
【发布时间】:2013-02-06 15:31:03
【问题描述】:

我有一个使用 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 块? 谢谢

【问题讨论】:

    标签: ruby-on-rails ruby authentication devise roles


    【解决方案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 }
    

    但只是作为一个例子。

    【讨论】:

    • 好的,谢谢,我会研究这两种方法的区别。但为什么它检索["venditore"] 而不是venditore
    • 好的,它总是返回一个数组,但也许用户角色总是一个,尽管是一个has_many 关联,所以我想返回单个角色。所以我用role_names更改了方法名称,但我不明白为什么,只是因为是一种命名方法的传统方式?
    • 是的,你是对的,但也许用户将来可能会有更多的角色,但我还是想打印出第一个角色
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 2017-12-22
    • 1970-01-01
    相关资源
    最近更新 更多