我正在使用 Rails 4.x beta 并尝试让嵌套属性与 Carrierwave 一起使用。不确定我正在做的事情是否是正确的方向。经过一番搜索,最后查看了 Rails 源代码和强大的参数,我发现了以下注释。
# Note that if you use +permit+ in a key that points to a hash,
# it won't allow all the hash. You also need to specify which
# attributes inside the hash should be whitelisted.
https://github.com/rails/rails/blob/master/actionpack/lib/action_controller/metal/strong_parameters.rb https://github.com/rails/rails/blob/master/actionpack/lib/action_controller/metal/strong_parameters.rb
所以它说你必须指定 has 中的每一个属性,我尝试了以下操作:
参数的例子:
{"utf8"=>"✓",
"authenticity_token"=>"Tm54+v9DYdBtWJ7qPERWzdEBkWnDQfuAQrfT9UE8VD=",
"screenshot"=>{
"title"=>"afs",
"assets_attributes"=>{
"0"=>{
"filename"=>#<ActionDispatch::Http::UploadedFile:0x00000004edbe40
@tempfile=#<File:/tmp/RackMultipart20130123-18328-navggd>,
@original_filename="EK000005.JPG",
@content_type="image/jpeg",
@headers="Content-Disposition: form-data; name=\"screenshot[assets_attributes][0][filename]\"; filename=\"EK000005.JPG\"\r\nContent-Type: image/jpeg\r\n">
}
}
},
"commit"=>"Create Screenshot"}
控制器
def screenshot_params
params.require(:screenshot).permit(:title,
:assets_attributes => [:filename => [:@tempfile,:@original_filename,:@content_type,:@headers]
上面的内容不是“工作”(它不触发载波),但是当使用我发现的标准嵌套示例时,我不再收到错误(不允许的参数:文件名):
def screenshot_params
params.require(:screenshot).permit(:title, assets_attributes: :filename)
如果有人能提供帮助那就太好了。我无法找到嵌套有指向哈希的键的示例。