我有一个带有以下结构的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...])
我该怎么做?
答案 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