将链接中的嵌套参数列入白名单

时间:2015-10-01 02:12:33

标签: ruby-on-rails strong-parameters

我有一个带有以下结构的params哈希(它是使用fields_for构建的)

=> {"utf8"=>"✓",
    "daily_log"=>
      {"id"=>"1",
       "entries_attributes"=>
          {"0"=>
              {"count"=>"",
               "hours"=>"",
               "minutes"=>"",
              }
          }
       },
    "controller"=>"entries",
    "action"=>"create"}

我正在尝试创建一个entries_attributes_params方法,该方法应该只返回params['daily_log']['entries_attributes']的白名单版本。不幸的是,当我调用该方法时,它会以{}的形式返回。

以下作品

def entries_attributes_params`
   params[:daily_log][:entries_attributes].permit!
end

但我想避免使用permit!。所以我尝试了以下内容:

def entries_attributes_params
    params[:daily_log][:entries_attributes].permit(:count, :hours, :minutes)
end

这不起作用。我回来了{}

我尝试使用permit将我传递给[]的属性包装起来,但这并不起作用。

...permit([...attributes...])

我该怎么做?

2 个答案:

答案 0 :(得分:1)

试试这个:

def entries_attributes_params
  params_hash = params.require(:daily_log).permit(:id, entries_attributes: [:count, :hours, :minutes])
  params_hash[:entries_attributes]
end

答案 1 :(得分:0)

想出来。关键是要认识到params.permit ...实际上并没有改变主params散列。它创建了一个新对象。将这个想法与K M的解决方案结合起来给出了完整的答案:

def entries_attributes_params
  p = params.require(:daily_log).permit(:id, entries_attributes: [:count, :hours, :minutes])
  p[:entries_attributes]
end