回形针不允许的参数:图像
Paperclip Unpermitted parameter: image
我正在尝试让 Paperclip 在表单提交时将我的节日模型中的图像上传到 s3,但我收到了 Unpermitted 参数:图像。 错误
我检查了强参数、模型内容验证并通读了回形针文档,但无济于事。
我想我已经将问题缩小到我对数据库的 post 请求无法处理分配给 festival.image 的文件对象,但无法弄清楚我将如何表示这个在 post 请求中。
我在 rails 中捕获数据,在前端使用 rails 上的反应,在 Rails 作为后端。我跟着这个示例代码 https://github.com/carlbaron/react-file-upload-demo
我也是用React-dropzone抓取上传的文件,它添加了图片预览的preview属性。
现在已经坚持了一段时间,非常感谢任何帮助!
post 请求的开始打印到控制台
Processing by FestivalsController#create as JSON
Parameters: {"festival"=>{"fest_name"=>"Test Festival", "image"=>{"preview"=>"blob:http://localhost:5000/76b95cb5-45bf-46a9-ba7b-f5b9ad127521"}}}
| Unpermitted parameter: image
节日对象打印到控制台
Post通过axios向DB请求
postFestival(festival) {
let config = {
responseType: 'json',
processData: false,
contentType: false,
headers: ReactOnRails.authenticityHeaders(),
};
let str = JSON.stringify(festival);
console.log("ENTITY IS " + str);
//returns
//ENTITY IS {"fest_name":"Test Festival","image":{"preview":"blob:http://localhost:5000/76b95cb5-45bf-46a9-ba7b-f5b9ad127521"}}
return(
request.post('/festivals/create', {festival}, config)
);
},
Festival.rb
class Festival < ApplicationRecord
has_attached_file :image, default_url: "/assets/ASOT-COVER.png"
validates_attachment :image,
content_type: { content_type: ["image/jpeg", "image/gif", "image/png"] }
end
节日控制器
def create
@festival = Festival.create(festival_params)
puts "festival.image =" + @festival.image.inspect
#returns = festival.image =#<Paperclip::Attachment:0x007fc288868bf0 @name=:image, @name_string="image", @instance=#
if @festival.save
puts "Festival SAved = + " + @festival.inspect
#returns the festival object saved to the DB minus the image param
else
respond_to do |format|
format.json { render json: @festival.errors, status: :unprocessable_entity}
puts "ERROR = " + @festival.errors.inspect
end
end
private
def festival_params
params.require(:festival).permit(:fest_name, :fest_organizer, :fest_location,
:fest_date, :fest_url, :fest_venue, :fest_description,
:image)
end
end
由于您请求中的 image
参数是一个散列 "image"=>{"preview"=>"blob:http://localhost:5000/76b95cb5-45bf-46a9-ba7b-f5b9ad127521"}
,您需要像这样修改您的 festival_params
方法:
def festival_params
params.require(:festival).permit(:fest_name, :fest_organizer, :fest_location,
:fest_date, :fest_url, :fest_venue, :fest_description,
{ image: :preview })
end
如果它解决了错误,请告诉我。
我正在尝试让 Paperclip 在表单提交时将我的节日模型中的图像上传到 s3,但我收到了 Unpermitted 参数:图像。 错误
我检查了强参数、模型内容验证并通读了回形针文档,但无济于事。
我想我已经将问题缩小到我对数据库的 post 请求无法处理分配给 festival.image 的文件对象,但无法弄清楚我将如何表示这个在 post 请求中。
我在 rails 中捕获数据,在前端使用 rails 上的反应,在 Rails 作为后端。我跟着这个示例代码 https://github.com/carlbaron/react-file-upload-demo
我也是用React-dropzone抓取上传的文件,它添加了图片预览的preview属性。
现在已经坚持了一段时间,非常感谢任何帮助!
post 请求的开始打印到控制台
Processing by FestivalsController#create as JSON
Parameters: {"festival"=>{"fest_name"=>"Test Festival", "image"=>{"preview"=>"blob:http://localhost:5000/76b95cb5-45bf-46a9-ba7b-f5b9ad127521"}}}
| Unpermitted parameter: image
节日对象打印到控制台
postFestival(festival) {
let config = {
responseType: 'json',
processData: false,
contentType: false,
headers: ReactOnRails.authenticityHeaders(),
};
let str = JSON.stringify(festival);
console.log("ENTITY IS " + str);
//returns
//ENTITY IS {"fest_name":"Test Festival","image":{"preview":"blob:http://localhost:5000/76b95cb5-45bf-46a9-ba7b-f5b9ad127521"}}
return(
request.post('/festivals/create', {festival}, config)
);
},
Festival.rb
class Festival < ApplicationRecord
has_attached_file :image, default_url: "/assets/ASOT-COVER.png"
validates_attachment :image,
content_type: { content_type: ["image/jpeg", "image/gif", "image/png"] }
end
节日控制器
def create
@festival = Festival.create(festival_params)
puts "festival.image =" + @festival.image.inspect
#returns = festival.image =#<Paperclip::Attachment:0x007fc288868bf0 @name=:image, @name_string="image", @instance=#
if @festival.save
puts "Festival SAved = + " + @festival.inspect
#returns the festival object saved to the DB minus the image param
else
respond_to do |format|
format.json { render json: @festival.errors, status: :unprocessable_entity}
puts "ERROR = " + @festival.errors.inspect
end
end
private
def festival_params
params.require(:festival).permit(:fest_name, :fest_organizer, :fest_location,
:fest_date, :fest_url, :fest_venue, :fest_description,
:image)
end
end
由于您请求中的 image
参数是一个散列 "image"=>{"preview"=>"blob:http://localhost:5000/76b95cb5-45bf-46a9-ba7b-f5b9ad127521"}
,您需要像这样修改您的 festival_params
方法:
def festival_params
params.require(:festival).permit(:fest_name, :fest_organizer, :fest_location,
:fest_date, :fest_url, :fest_venue, :fest_description,
{ image: :preview })
end
如果它解决了错误,请告诉我。