我有一个具有以下结构的参数散列(它是使用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...])
我该怎么做?
试试这个:
def entries_attributes_params
params_hash = params.require(:daily_log).permit(:id, entries_attributes: [:count, :hours, :minutes])
params_hash[:entries_attributes]
end
明白了。关键是要认识到params.permit ...
实际上并没有改变主参数散列。它创建了一个新对象。将这个想法与K M的解决方案结合起来,就得到了完整的答案:
def entries_attributes_params
p = params.require(:daily_log).permit(:id, entries_attributes: [:count, :hours, :minutes])
p[:entries_attributes]
end