我正在使用Rails 4,试图上传一张图片并在处理后存储它。
我只使用一个视图,在视图中用户可以上传图片,我会处理这张图片,将其存储在数据库中,然后重新加载页面以显示新处理过的图片。
我的模型(user.rb)
class User < ActiveRecord::Base
mount_uploader :image, ImageUploader
end
上传器 (image_uploader.rb)
# encoding: utf-8
class ImageUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
process :changeImage
def changeImage
manipulate! do |source|
source = source.sepiatone
end
end
控制器(app_main_controller.rb)
require 'Rmagick'
class AppMainController < ApplicationController
def index
# page reload handling when the file uploads
if(params.has_key?("file-input"))
@u= User.new
@u.image = params["file-input"]
if(@u.save)
render js: "alert('SAVED')"
else
render js: "alert('Error while saving image! Try Again!')"
end
# initial page load
else
end
end
end
我在视图(即index)中使用image_tag @u.image_url
访问图片上传组件。
每次在image_uploader.rb中添加任何类型的处理操作时,我都会收到“堆栈过深”的错误提示。如果不添加处理操作,则图片可以成功上传。
有什么想法吗?请指教。
source = source.sepiatone
在某种程度上再次触发了 process 方法,从而导致无限递归。 - Zeeshan