首页 > 解决方案 > 如何根据哈希中的另一个值设置变量

问题描述

我正在尝试遍历键/值对的哈希,并根据其中一个键是某个值来设置一个变量。

    @custom_fields = [{
      "field_id" => "6",
      "field_identifier" => "NROM_Password",
      "field_type" => "input_field",
      "field_value" => "NROM Password 1"
    }, {
      "field_id" => "5",
      "field_identifier" => "NROM_Username",
      "field_type" => "input_field",
      "field_value" => "NROM Username 1"
    }]

我想设置一个调用@username键值field_value的变量,只有当field_identifier键等于“NROM_Username”并且field_value不为空时。

这是我到目前为止的代码片段:

@custom_fields.each do |custom_field|
  custom_field.each do |field_key, field_value|
    if (field_key == "field_identifier" && field_value == "NROM_Username")
      @password = (field_key == "NROM_Password" && value?) ? value : ""
    end
  end
end

标签: ruby-on-railsruby

解决方案


hash = @custom_fields.inject({}) do |memo, cf|
  memo.merge(cf["field_identifier"] => cf["field_value"].presence)
end.compact

# this is kind of silly - nil is nil
@username = hash["NROM_Username"] if hash["NROM_Username"]

推荐阅读