【问题标题】:Paperclip not saving attachment on Padrino回形针没有在帕德里诺上保存附件
【发布时间】:2012-08-07 20:25:12
【问题描述】:

我正在使用 padrino 构建网站。我使用回形针将徽标上传到其中一个模型。我遇到的问题是 Paperclip 不保存附件,但也没有抛出任何错误。我认为传递给控制器​​的参数类型不正确,因为params[:logo] 是一个哈希值,应该是某种文件类型?如何让Paperclip保存参数中传递的附件?

型号:

class Charity < ActiveRecord::Base
  include Paperclip::Glue

  attr_accessible :name, :description, :logo
  has_attached_file :logo, path: "/public/:attachment/:id/:basename.:extension"
end

标志在控制器中设置如下:

post :create do
  @charity = Charity.new(params[:charity])
  if @charity.save!
    flash[:notice] = 'Charity was successfully created.'
    redirect url(:charities, :edit, id: @charity.id)
  else
    render 'charities/new'
  end
end

将参数传递给控制器​​的表单如下所示(部分省略):

- form_for :charity, url(:charities, :create), multipart: true, class: :form do |f|
  (...)
  .group
    ==f.label :logo
    ==f.error_message_on :logo
    ==f.file_field :logo
  (...)

我正在使用 Paperclip 2.7.0 和 Padrino 0.10.7。 我还根据Using Paperclip with Padrino 将其添加到 boot.rb :

Padrino.before_load do
  File.send(:include, Paperclip::Upfile)

  Paperclip.options[:logger] = Padrino.logger
  Paperclip.options[:command_path] = "/usr/local/bin"

  ActiveRecord::ConnectionAdapters::AbstractAdapter.send(:include, Paperclip::Schema)
  ActiveRecord::ConnectionAdapters::Table.send(:include, Paperclip::Schema)
  ActiveRecord::ConnectionAdapters::TableDefinition.send(:include, Paperclip::Schema)
end

【问题讨论】:

    标签: ruby paperclip padrino


    【解决方案1】:

    嗯,我不知道。也许是这样:

    path: Padrino.root('/public/:attachment/:id/:basename.:extension')

    你能不能进去padrino console试试:

    >> require 'open-uri'
    >> puts Paperclip.default_options
    >> c = Charity.create!
    >> c.logo = open('http://1.bp.blogspot.com/-0Hn3AjTJj6U/TZHe3ragXGI/AAAAAAAAA1M/_SBk3dx61EE/s1600/med_funny-cat.jpg')
    >> c.save!
    

    【讨论】:

    • 试过了,但它没有帮助,因为如果附件是文件可以保存,但问题是在 Padrino params[:logo] 是一个哈希,而它应该是一个文件。在 Rails 中,文件作为 ActionDispatch::HTTP::UploadedFile 传递给控制器​​,Paperclip 知道如何处理它,但不知道如何处理包含文件详细信息(文件名、内容类型等)的哈希值。有什么方法可以让回形针转换散列 -> 文件?
    • 您可以改用亚马逊存储。或者还有另一种称为 CarrierWave 的解决方案,它与 sinatra 兼容。你也可以找到关于它的铁轨。
    • 有点晚了,但我最终使用了 CarrierWave,它运行起来没有问题。还是谢谢。
    猜你喜欢
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多