我正在尝试使用哈希来存储用户。我有这段代码,它正在工作,但这不是我想要的方式:
@user_hash = Hash.new
@user_hash = User.all(:all)
user = Hash.new
user = @user_hash.select { |item| item["user_id"] == '001' }
puts user[0].name
我怎样才能使用类似user.name
insted的东西user[0].name
?
首先,你不需要在使用之前初始化你的哈希——这两个调用在Hash.new
这里都是不必要的。
其次,您唯一的问题是您正在使用该select
方法。引用文档:
返回一个新的哈希,该哈希由块返回 true 的条目组成。
那不是你想要的。您想使用detect
:传递枚举中的每个条目以阻止。返回第一个不为假的块。
user = @user_hash.detect { |item| item["user_id"] == '001' }
应该管用
要创建哈希,您应该使用以下语法:
@user_hash = Hash[User.find(:all).collect{|u| [u.user_id, u]}]
然后您可以执行以下操作:
puts user["001"].name
user = Hash.new
是浪费时间,因为您正在用以下结果覆盖它select
。
并select
返回一个通过测试的哈希数组。
您想要.find
或其同义词.detect
而不是.select
.