【问题标题】:Accessing value(s) of ActionController Parameters hash访问 ActionController 参数哈希的值
【发布时间】:2017-09-12 17:31:49
【问题描述】:

我在从 4.2 升级到 5.1 的应用中遇到参数问题。我已经允许我的参数,但正如文档所述,我正在为我的哈希数组取回一个对象,但似乎无法访问它的值。我怎样才能得到这个对象的值?

    {"_method"=>"delete",   "authenticity_token"=>"Z6ZqriiuXu6ODDqhGgocGiaN12rjKD6pUB6n/2v+CABZDAjwLzwczsMM3nM8f0PI0nww43o5mlC35HK+9PVa8w==",
    "domain_name"=>"test.testmodule2.com.",
    "hosted_zone_id"=>"/hostedzone/XXXXXXXXXX",
    "ttl"=>"3600",
    "type"=>"A",
    "value"=>[{"value"=>"1.1.1.1"}],
    "id"=>"/hostedzone/XXXXXXXXXX"}

def record_params
    params.permit!([:hosted_zone_id, :domain_name, :type, :ttl, :alias, :value]).to_h!
end


def destroy
    value = params[:value]
    # returns [<ActionController::Parameters {"value"=>"1.1.1.1"} permitted: true>]
    # would like it to return [{"value"=>"1.1.1.1"}]
end

【问题讨论】:

    标签: ruby-on-rails strong-parameters actioncontroller


    【解决方案1】:

    如果该哈希是params[:value] 的值,则访问里面的value 键,例如:

    params[:value] = {
      "_method"=>"delete",   
      "authenticity_token"=>"...",
      "domain_name"=>"test.testmodule2.com.",
      "hosted_zone_id"=>"/hostedzone/XXXXXXXXXX",
      "ttl"=>"3600",
      "type"=>"A",
      "value"=>[{"value"=>"1.1.1.1"}],
      "id"=>"/hostedzone/XXXXXXXXXX"
    }
    
    params['value']['value'][0]['value']
    # => "1.1.1.1"
    params['value']['value'][0].keys
    # => ["value"]
    

    【讨论】:

    • 感谢您的快速回复。当我输入 [:value] 时,它会打印出正确的值,但是当我稍后需要成为数组对象时调用该变量时,它会返回 "[&lt;ActionController::Parameters {"value"=&gt;"1.1.1.1"} permitted: true&gt;]"。有什么想法吗?
    • 由于您的结构,您必须访问包含 ActionControllerParameters 的数组,然后访问像 p params['value']['value'][0]['value'] 这样的值键
    • 所以现在没有办法只获取数组/哈希而不是值?
    • 试试params.to_unsafe_h[:value],你得到预期的输出了吗?
    • 最后一个做到了!我能够通过哈希而不是对象。非常感谢您的帮助 - 我真的很感激!
    猜你喜欢
    • 1970-01-01
    • 2013-03-22
    • 2021-05-09
    • 2013-06-06
    • 2017-08-08
    • 2013-07-27
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    相关资源
    最近更新 更多