无法使用'二进制'创建模型使用Active Admin和Rails 4.1的字段

时间:2014-05-06 22:10:38

标签: ruby-on-rails activeadmin ruby-on-rails-4.1

我使用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。

1 个答案:

答案 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