为什么这个find_all方法不能正常工作

时间:2015-07-15 19:24:27

标签: ruby-on-rails arrays ruby ruby-on-rails-4

我有一个方法,假设迭代一个数组并将任何项匹配到我的模型中的字符串。我的方法看起来像这样

@new_array = @old_array.find_all { |t| t.fetch('name') == "self.object_name" }

此方法应该通过我拥有的哈希数组查找并匹配与object_name同名的任何项目。当我在控制台中测试与object_name的名称比较时,它显示为true,但是当我运行上述完整方法时,它没有显示找到的对象,但是我知道该数组包含多个具有完全相同名称的对象。什么意思错了?

阵列看起来像......

old_array = {"id"=>"123", "account"=>"456", "name"=>"CITY"},
    {"id"=>"456", "account"=>"567", "name"=>"CITY DIR DEP"},
    {"id"=>"456", "account"=>"567", "name"=>"BUCK"},
    {"id"=>"456", "account"=>"567", "name"=>"CITY DIR DEP"},
    {"id"=>"456", "account"=>"567", "name"=>"HAPPY"},
    {"id"=>"456", "account"=>"567", "name"=>"CIRCLE"}

并且对象在控制台中打印出来

self.object_name => "CITY DIR DEP"

2 个答案:

答案 0 :(得分:2)

您根本不需要引号"(您确实试图将检索到的name与字符串"self.object_name"进行比较,而不是self.object_name的值):

@new_array = @old_array.find_all { |t| t.fetch('name') == self.object_name }

如果您是粉丝,可以使用"#{}"进行插值:

@new_array = @old_array.find_all { |t| t.fetch('name') == "#{self.object_name}" }

答案 1 :(得分:1)

试试这个:

@new_array = @old_array.find_all { |t| t['name'] == self.object_name }