2012-08-07 34 views
1

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

模型:

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。 我也已经加入这个的boot.rb按照Using Paperclip with Padrino

​​

回答

0

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

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! 
+0

试过了,它并没有帮助,因为该附件可如果它是一个文件进行保存,但问题是在Padrino中'params [:logo]'是一个散列,而它应该是一个文件。在Rails中,该文件作为ActionDispatch :: HTTP :: UploadedFile传递给控制器​​,Paperclip知道该如何处理,但不知道如何处理包含文件细节(文件名,content_type等)的散列。任何方式使Paperclip转换哈希 - >文件? – nethopp3r 2012-08-07 19:19:49

+0

您可以改为使用亚马逊存储。或者还有另一种叫做CarrierWave的解决方案,它与sinatra兼容。你也可以找到铁轨。 – Ivan 2012-10-04 09:55:20

+0

这有点晚,但我最终使用了CarrierWave,它的工作没有问题。不管怎么说,还是要谢谢你。 – nethopp3r 2012-10-24 17:52:10