2

我在模型类中有以下内容User

  def thisUsersUserRole
    userRoles = []
    self.userRoles.each do |ur|
      userRoles << { "id" => ur.role_id, "name" => ur.roleName }
    end
    #line in question
    userRoles.values.min_by(&:first)
    # puts userRoles
  end

显示puts如下:

{"id"=>1, "name"=>"admin"}
{"id"=>2, "name"=>"owner"}
{"id"=>3, "name"=>"manager"}

我正在尝试搜索数组(总共不超过 10 个,但根据我的研究,这是最便宜的方法)并返回哈希/关联数组中"name"最小值的属性值。"id"

我如何使用min_by来完成此操作。该文档没有任何意义......请帮助我理解语法,因为只是为我提供正确的行不会帮助我学习。

4

2 回答 2

5

鉴于现有代码和您对我的评论的回复,我认为这就是您想要的:

role_hash_with_smallest_id = userRoles.min_by {|role_hash| role_hash['id']}
role_hash_with_smallest_id['name']

但是,可能有一种更简单的方法:

role_with_smallest_id = self.userRoles.min_by {|role| role.id}
role_with_smallest_id.name

可以简写为

role_with_smallest_id = self.userRoles.min_by(&:id)
role_with_smallest_id.name

这是假设self.userRoles已经是一个Enumerable.

于 2012-12-25T12:24:44.627 回答
3

试试下面:

def thisUsersUserRole
  userRoles.min_by(&:role_id).roleName
end

编辑:如果userRoles是散列数组,则尝试:

def thisUsersUserRole
  userRoles.min_by{ |ur| ur['id'] }['roleName']
end
于 2012-12-25T11:30:49.067 回答