我有
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
的正确方法是什么?
答案 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"