即使条件成立,为什么拒绝不在我的哈希上工作?

时间:2015-05-09 18:40:45

标签: ruby-on-rails arrays ruby hash rails-console

我有以下哈希

{"goes_by"=>[nil, ""], "middle_name"=>[nil, ""], "suffix"=>[nil, ""], "jersey"=>["8", "8A"]}

我正在尝试编写一个语句来拒绝任何具有nil&的嵌套数组的元素。 “”。所以我编写了以下命令来尝试执行此操作,但它返回nil,就好像哈希没有任何更改...

Player.find(286).audits.first.audited_changes.reject! {|x| x[1][0].blank? && x[1][1].blank? }
         => nil 

但是当我打印出结果时,其中三个元素的条件是正确的。我在这里缺少什么?

Player.find(286).audits.first.audited_changes.each {|x| puts x[1][0].blank? && x[1][1].blank? }

    true
    true
    true
    false

     => {"goes_by"=>[nil, ""], "middle_name"=>[nil, ""], "suffix"=>[nil, ""], "jersey"=>["8", "8A"]} 

2 个答案:

答案 0 :(得分:3)

首先,当您在哈希上调用reject!时,请记住您的块应该采用两个参数而不是一个。在您的情况下,参数x始终是您的哈希的键,所以分别是:go_by,middle_name,suffix,

所以块应如下所示:

.reject! { |key, array| array.all? { |array_item| array_item.blank? } }

答案 1 :(得分:1)

请注意,您正在使用带有哈希的reject!

{ "goes_by"=>[nil, ""],
  "middle_name"=>[nil, ""], 
  "suffix"=>[nil, ""],
  "jersey"=>["8", "8A"]
}.reject! {|key, value| value.all?(&:blank?) }]

这将返回=> {“jersey”=> [“8”,“8A”]}