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

use*_*963 5 ruby ruby-on-rails

我有

item_params = {
  "name" => "",
  "description" => "",
  "tag_list" => "",
  "user_items_attributes" => {"0" => {"user_id" => "8"}},
  "created_by" => 8,
  "status" => 0
}
Run Code Online (Sandbox Code Playgroud)

我想访问user_id来更改它.

我试过params[:item][:user_items_attributes][0]但它不起作用.我也试过了params[:item][:user_items_attributes][0][:user_id].改变的正确方法是user_id什么?

Sha*_*ell 10

params[:item][:user_items_attributes]是将字符串映射到散列的哈希值.您正尝试使用整数0而不是'0':

params[:item][:user_items_attributes]['0']
 => {"user_id"=>"8"}
Run Code Online (Sandbox Code Playgroud)

您经常可以使用符号键访问哈希,而不是因为rails的HashWithIndifferentAccess检查哈希值而显示的字符串键,但在这种情况下您需要使用字符串作为键.


小智 5

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

在您的情况下,它将看起来像:

user_id = item_params.dig("user_items_attributes", "0", "user_id")
Run Code Online (Sandbox Code Playgroud)