Rails - 如何访问嵌套的params属性?

时间:2016-02-15 14:37:33

标签: ruby-on-rails ruby

我有

item_params = {
  "name" => "",
  "description" => "",
  "tag_list" => "",
  "user_items_attributes" => {"0" => {"user_id" => "8"}},
  "created_by" => 8,
  "status" => 0
}

我想访问user_id进行更改。

我试过了params[:item][:user_items_attributes][0]但它没有用。我也试过了params[:item][:user_items_attributes][0][:user_id]。更改user_id的正确方法是什么?

4 个答案:

答案 0 :(得分:8)

params[:item][:user_items_attributes]的值是将字符串映射到哈希的哈希。您尝试使用整数0而不是'0'来访问它:

params[:item][:user_items_attributes]['0']
 => {"user_id"=>"8"}

您经常可以使用符号键而不是由于rails HashWithIndifferentAccess检查哈希时显示的字符串键来访问哈希值,但在这种情况下您需要使用字符串作为键。< / p>

答案 1 :(得分:4)

从Ruby 2.3.0开始,您可以使用Hash#dig方法,这比使用Hash#[]访问更安全。您可以找到一些有用的示例here

在您的情况下,它将如下所示:

user_id = item_params.dig("user_items_attributes", "0", "user_id")

答案 2 :(得分:2)

这很容易解决!

params["user_items_attributes"] #=> {"0" => {"user_id" => "8" }}

所以如果你想获得user_id:

params["user_items_attributes"]["0"]["user_id"] #=> "8"

希望有所帮助:)

答案 3 :(得分:0)

访问user_id的最佳方式是

2.2.1 :122 >   item_params = {
2.2.1 :123 >       "name" => "",
2.2.1 :124 >       "description" => "",
2.2.1 :125 >       "tag_list" => "",
2.2.1 :126 >       "user_items_attributes" => {"0" => {"user_id" => "8"}},
2.2.1 :127 >       "created_by" => 8,
2.2.1 :128 >       "status" => 0
2.2.1 :129?>   }
 => {"name"=>"", "description"=>"", "tag_list"=>"", "user_items_attributes"=>{"0"=>{"user_id"=>"8"}}, "created_by"=>8, "status"=>0} 
2.2.1 :130 > item_params['user_items_attributes']['0']['user_id']
 => "8"