我使用ActiveAdmin创建幻灯片'实际上是在数据库中存储为二进制文件的图像:
class CreateSlides < ActiveRecord::Migration
def change
create_table :slides do |t|
t.binary :image
t.timestamps
end
end
end
我的管理脚本也非常简单:
ActiveAdmin.register Slide do
permit_params :image
form do |f|
f.inputs 'Slide details' do
f.input :image, :as => :file
end
f.actions
end
end
所以当我按下'创建幻灯片'时,按钮,我得到这个例外:
wrong argument type ActionDispatch::Http::UploadedFile (expected String)
{"utf8"=>"✓",
"authenticity_token"=>"A/Ux8rduVlaQQrimOV0qWFAhXR8ATJnfKupp03RVXmg=",
"slide"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x007f1bb9515eb0 @tempfile=#<Tempfile:/tmp/RackMultipart20140507-20302-1yd7q93>,
@original_filename="info.jpg",
@content_type="image/jpeg",
@headers="Content-Disposition: form-data; name=\"slide[image]\"; filename=\"info.jpg\"\r\nContent-Type: image/jpeg\r\n">,
},
"commit"=>"Create Slide"}
昨天我又开始使用Rails,但我总是在其中使用新手。我知道一些关于强大参数的信息。我认为UploadFile是他们的有效类型。所以我很奇怪为什么会有这个错误。我使用Rails 4.1和Active Admin 0.6.3。
答案 0 :(得分:1)
问题不在于“强参数” - 或者您得到“禁止......”错误。问题是Rails打破了save-blob-to-db功能,至少在它如何在Rails 3中运行方面有所改进。这个升级到4 ......呃!
我在这里给出了一个解决方法: Trouble with uploading file after upgrating rails from 3.2 to 4
你必须在你的控制器中“修复”这个,通过你的表单返回 - 我猜“params [:image]” - 然后像这样添加“.read”:
@slide.image = params[:image].read
@slide.save
假设您使用“@slide”作为模型对象实例。如果你上面的代码被削减了,你就可以分别隔离,删除和保存一个param,因为你不能再将它们保存在其他param中了。
请参阅此处了解原因: http://api.rubyonrails.org/classes/ActionDispatch/Http/UploadedFile.html