Carrierwave + ActiveAdmin,带有文件和图像字段的示例。导致堆栈级别过深"

时间:2014-10-15 19:08:53

标签: ruby-on-rails-4 activeadmin

我正在尝试在ActiveAdmin上创建文件和图像字段。实施例。

Active Admin example

  

到目前为止我所拥有的。

  • 创建了一个迁移,将文件和图像列添加到数据库中。
  • 创建了Active Admin并编辑了显示表单。
  • 创建模型
  • 创建了2个上传者

我的代码导致"堆栈级别太深"错误。

奇怪的是代码与我的例子完全一样,工作正常。

系统管理员/ product.rb

ActiveAdmin.register Product do
  permit_params :title, :image, :file

form(:html => { :multipart => true }) do |f|
   f.inputs "Create Product..." do
     f.input :title
     f.input :image, :as => :file, :hint => f.template.image_tag(f.object.image.url(:thumb))
     f.input :file, :as => :file

   end
     f.actions
 end
end

模型/ product.rb

class Product < ActiveRecord::Base
    mount_uploader :file, FileProductsUploader
    mount_uploader :image, ImageProductsUploader
end

上传/ file_products_uploader.rb

 class FileProductsUploader < CarrierWave::Uploader::Base
  storage :file

 def store_dir
   "#{Rails.root}/public/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
 end
end

上传/ image_products_uploader.rb

  class ImageProductsUploader < CarrierWave::Uploader::Base
  include CarrierWave::RMagick
   storage :file

  def store_dir
    "#{Rails.root}/public/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  version :thumb do
     process :resize_to_fit => [250, 250]
  end
end
  

错误消息

 SystemStackError in Admin::ProductsController#update

 stack level too deep

{"utf8"=>"✓",
"_method"=>"patch",
 "authenticity_token"=>"ViiAmqH+S9XjP0wBSc7I2USEl1LXLw/N532Kd+uhNqc=",
 "product"=>{"title"=>"First Product",
 "image"=>#<ActionDispatch::Http::UploadedFile:0x50e6008 @tempfile=#   <Tempfile:C:/Users/User/AppData/Local/Temp/RackMultipart20141016-7388-e5v6is>,
 @original_filename="example.png", 
 @content_type="image/png",
 @headers="Content-Disposition: form-data; name=\"product[image]\";  filename=\"example.png\"\r\nContent-Type: image/png\r\n">},
"commit"=>"Update Product", 
"id"=>"1"}

控制台错误消息

Unpermitted parameters: utf8, _method, authenticity_token, commit, id
Completed 500 Internal Server Error in 138ms

SystemStackError (stack level too deep):
  actionpack (4.1.5) lib/action_dispatch/middleware/reloader.rb:79

1 个答案:

答案 0 :(得分:0)

所有在线解决方案都不适合我。我解决了更改本地临时目录

的错误

<强>上传/ *

def cache_dir
   # should return path to cache dir
   Rails.root.join 'tmp/uploads'
end