【问题标题】:Upload base64 Image with Paperclip - Rails 4使用回形针上传 base64 图像 - Rails 4
【发布时间】:2015-04-28 21:40:20
【问题描述】:

我对 Rails 比较陌生,如果有任何帮助,我将不胜感激。

我的网站接受 base64 格式的签名图像,我正在尝试使用回形针适配器解码图像并将其作为:signature 属性保存到我的form 模型中。我正在使用here(和here)给出的建议,建议使用以下代码:

在模型中:

class Thing
    has_attached_file :image

在控制器中:

def create
  image = Paperclip.io_adapters.for(params[:thumbnail_data]) 
  image.original_filename = "something.gif"
  Thing.create!(image: image)
  ...
end

我的假设是 Thing.create! 在创建和保存新事物对象时将 Paperclip 的模型属性 :image 的值设置为 image 变量的值。我尝试在@form.save 之前的FormsController(创建操作)中实现相同的代码,但收到此错误:

undefined method `before_image_post_process' for #<Class:0x007f94a2a26de8>

我的FormsController

class FormsController < ApplicationController
  before_action :logged_in_user
  before_action :admin_user, only: :destroy

  def index
    @forms = Form.all #paginate
  end

  def show
    @form = Form.find(params[:id])
  end

  def new
    @form = Form.new
  end

  def create
    @form = Form.new(form_params)

    # Paperclip adaptor 
    signature = Paperclip.io_adapters.for(params[:base64])
    signature.original_filename = "something.png"

    # Attempt to submit image through Paperclip
    @form.signature = signature

    if @form.save
      flash[:success] = "The form has been successfully created!"
      redirect_to @form
    else
      render 'new'
    end
  end

  def edit
    @form = Form.find(params[:id])
  end

  def update
    @form = Form.find(params[:id])
    if @form.update_attributes(form_params)
      flash[:success] = "Form has been updated!"
      redirect_to @form
    else
      render 'edit'
    end
  end

  def destroy
    Form.find(params[:id]).destroy
    flash[:success] = "Form deleted"
    redirect_to forms_path
  end

  private

  def form_params
    params.require(:form).permit(:first_name, :last_name, :email, :phone, :address, :member_type, :base64)
  end
end

这是我的Form 模型:

class Form < ActiveRecord::Base

  has_attached_file :signature
  validates_attachment_content_type :image, :content_type =>     ["image/jpg", "image/jpeg", "image/png", "image/gif"]

 end

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 base64 paperclip


    【解决方案1】:

    假设您在视图中使用 Rails 表单助手,并且根据您的 form_params 列表,:base64 键不会在您的 params 哈希的顶层,而是一个降级到params[:form][:base64]

    【讨论】:

    • 非常感谢!我很高兴我没有完全离开。
    • 现在我正在使用$("#base64").val(base64);:base64 表单属性赋值。有没有更有效的方法来做到这一点?
    • 好吧,如果您使用的是标准 Rails 表单助手,那么该元素的 id 不会是 base64 而是 form_base64 所以我不确定它是如何工作的,但如果你能以某种方式工作,那么就没有任何问题——效率方面。
    • 我明确地给了它一个 id:&lt;%= f.hidden_field :base64, id: "base64" %&gt;,却没有意识到表单助手会自动设置 id。感谢您的提示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 2018-08-25
    • 2012-07-03
    • 1970-01-01
    • 2016-01-04
    • 2017-05-16
    相关资源
    最近更新 更多