【问题标题】:Why is this find_all method not working rails为什么这个 find_all 方法不起作用
【发布时间】:2015-10-05 00:26:52
【问题描述】:

我有一个方法,它假设迭代一个数组并将任何项目匹配到我在我的模型中拥有的字符串。我的方法是这样的

@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"

【问题讨论】:

  • 这是在寻找带有nameself.object_name 的散列,所以如果你有一个散列{"id" => '123', ..., "name" => "self.object_name"},它将被返回

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


【解决方案1】:

您根本不需要引号 "(您实际上是在尝试将检索到的 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}" }

【讨论】:

  • {} 的上下文中,Ruby 现在不是将self 称为t 吗?我认为 OP 也在外部环境中使用self.object_name
  • @sjagr:我想我们不在同一个页面上。你能详细说明一下吗?
  • 明白了!但真正的问题是我将该方法作为私有方法并在另一个模型中调用它。感谢您的彻底回答!
【解决方案2】:

试试这个:

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

【讨论】:

    猜你喜欢
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多