我刚刚在我的ruby on rails博客应用程序中安装了paperclip.一切都很好......太棒了.我试图弄清楚如果表中没有记录,如何告诉paperclip不要输出任何内容,以便我没有到处都有破碎的图像链接.我是怎么做到的?
这是我的代码:
class Post < ActiveRecord::Base
  has_attached_file :photo, :styles => { :small => "150x150"}
  validates_presence_of :body, :title
  has_many :comments, :dependent => :destroy
  has_many :tags, :dependent => :destroy
  has_many :ugtags, :dependent => :destroy
  has_many :votes, :dependent => :destroy
  belongs_to :user
  after_create :self_vote
      def self_vote
       # I am assuming you have a user_id field in `posts` and `votes` table.
       self.votes.create(:user => self.user)
      end
  cattr_reader :per_page 
    @@per_page = 10
end
Run Code Online (Sandbox Code Playgroud)
视图
<% div_for post do %>
    <div id="post-wrapper">
        <div …Run Code Online (Sandbox Code Playgroud) 我在这个上画了一个空白.这是我的问题:
精简版
我的image#create行动是在image.save通话和投掷失败Undefined method "name" for nil:NilClass.Image模型包括通过paperclipgem 上传的文件.
扔我的部分:
只有在我:multipart => true提交表单时才会出现错误
当我拿出它时,表单完美无缺,当然图像文件没有上传.有关失败位置的详细信息,请参阅下面的堆栈跟踪.在尝试为INSERT语句引用某些内容时,它看起来像是一个零值,但我无法弄清楚是什么.我的控制器参数看起来没问题,我通过记录器进行检查,以确保新Image实例在点击保存调用之前正确构建.
额外细节
我将尝试包括我能想到的所有细节,按重要性排序:
我正在使用paperclip并试图通过S3进行存储,尽管当我has_attached_file在我的Image模型中完全注释掉这一行时仍然会出现这个问题.
Image是Collection中的嵌套资源,在其to_param方法中由slug引用.
我有多租户系统的基础知识(又名Basecamp风格的用户子域,通过中心用户模型实现,范围所有组件).
传递给控制器的参数
{"utf8"=>"✓",
 "authenticity_token"=>"JYCMky7851j5cW4ChSWUCCL/02iePf6i/QWAgR8q5tE=",
 "image"=>{"name"=>"My testerific image 2",
 "slug"=>"my-testerific-image-2",
 "description"=>"w",
 "collection_id"=>"2",
 "sort"=>"3",
 "picture_file_name"=>#<ActionDispatch::Http::UploadedFile:0x00000101b3f540 @original_filename="David's pic 005.jpeg",
 @content_type="image/jpeg",
 @headers="Content-Disposition: form-data; name=\"image[picture_file_name]\"; filename=\"David's pic 005.jpeg\"\r\nContent-Type: image/jpeg\r\n",
 @tempfile=#<File:/var/folders/df/mvsv5cs137gbyl8r7h428zp40000gn/T/RackMultipart20110814-64770-duz6wu>>},
 "commit"=>"Create Image",
 "collection_id"=>"my-new-collection"}
Run Code Online (Sandbox Code Playgroud)
完整堆栈跟踪
activesupport (3.0.9) lib/active_support/whiny_nil.rb:48:in 'method_missing'
/Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:20:in 'block in initialize'
/Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:22:in 'yield'
/Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:22:in 'default'
/Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:22:in 'block in initialize' …Run Code Online (Sandbox Code Playgroud) 我正在尝试将paperclip集成到一个简单的评论线程中,以便用户可以将文件附加到他们的评论中.
据我所知,按照回形针附带的说明,我最终可以将一个文件附加到一条评论中.
我希望能够附加多个文件.我是否需要创建一个具有has_many关系的独立"附件"模型?
Paperclip非常适合Heroku上的应用程序,但我似乎无法让它在本地运行.每当我尝试做某事时,我都会得到"缺少必需品:桶选项"......但是桶就在那里,它适用于Heroku!
这是我的模型,如果它有帮助:
  has_attached_file :screen_one, :styles => { :medium => "800x600>", :thumb => "110x80#" },
  :storage => :s3,
  :s3_credentials => {
    :access_key_id => ENV['accesskeyishere'],
    :bucket => ENV['sitebuilderreport'],
    :secret_access_key => ENV['secretaccesskeyishere']
  }
Run Code Online (Sandbox Code Playgroud)
我已经更改了访问密钥,因为这是一个公共帖子:)
我正在使用omniauth-facebook并尝试使用回形针显示个人资料图片.这是我用来将图片添加到用户模型的代码
def picture_from_url(url)
    self.profile_pic =open(url)
end
Run Code Online (Sandbox Code Playgroud)
但是,它始终保存为stringio.txt.所以搜索这个行为我发现回形针允许回调,所以我在User模型中编写了以下方法来重命名文件名
def rename_profile_pic
    self.profile_pic.instance_write :filename, "#{self.username}.jpg"
end 
Run Code Online (Sandbox Code Playgroud)
并将其传递给回调
before_post_process :rename_profile_pic
Run Code Online (Sandbox Code Playgroud)
但这似乎没有帮助.
我有什么想法可以解决这个问题?
谢谢
我有一些珍贵的代码压缩了一大堆文件,它在tmp文件系统中创建了一个zip文件,并在那里添加了文件.
我试图通过使用ruby的Tempfile将文件存储在代码中而不是手动将其自己写入tmp目录并稍后删除它来提高效率.
我写了这段代码试着去做...
def zip_up_files
  require 'zip/zip'
  t = Tempfile.new(["temp-filename-#{export_type}", '.zip'], :type => 'application/zip')
  Zip::ZipOutputStream.open(t.path) do |z|
    #pop some files in the zip...
  end
  #save it to the has_attachment :download on the model
  self.download = File.open(t.path)
  self.save
  #delete TempFile...
  t.close
end
Run Code Online (Sandbox Code Playgroud)
此sucsfullt将Tempfile保存到模型上的.download.但是,如果您现在导航到已保存的zip文件,则它不是zip文件而是乱码文本文档.我想知道在将它保存到模型之前是否有缺少创建或保存zip的东西.我已经尝试将该类型放入TempFile创建中.看起来拉链缺少MimeType.但我不确定,有人可以帮忙吗?
谢谢!
是否可以允许用户重命名上传的文件?
如果有共享链接,它会自动更新.我无法做到这一点,因为我无法弄清楚如何重命名文件.
我使用"paperclip","〜> 4.1"(在Windows 8上)将图片保存到我的产品中.我有下面的代码:
products_controller:
class ProductsController < ApplicationController
  before_action :set_product, only: [:show, :edit, :update, :destroy]
  def index
    @products = Product.all
  end
  def show
  end
  def new
    @product = Product.new
  end
  def edit
    @product = Product.all
  end
  def create
    @product = Product.new(product_params)  
    respond_to do |format|
      if @product.save
        format.html { redirect_to @product, notice: 'Product was successfully created.' }
        format.json { render action: 'show', status: :created, location: @product }
      else
        format.html {
          render action: 'new'
        }
        format.json { render json: @product.errors, status: :unprocessable_entity …Run Code Online (Sandbox Code Playgroud) 我正在使用带有Paperclip + Rails的Rails 3:
Gemfile
  gem "paperclip"
  gem "mongoid-paperclip", require: 'mongoid_paperclip'
Run Code Online (Sandbox Code Playgroud)
一切正常,除非用户上传带有非字母数字字符的文件的照片,如下所示:
thing 1/2/3/.PNG
Run Code Online (Sandbox Code Playgroud)
我试过用以下方法处理before_post_process before_validation:
  def strip_strange_characters_from_attachments
    # Set the clean Attachment File Title
    self.attachment.instance.meta['file_name'] = "test.png"
  end
Run Code Online (Sandbox Code Playgroud)
但是,rails事先犯了错误,文件没有上传.错误如下.有任何想法吗?
[2014-06-10 13:54:47] INFO    Command :: identify -format %wx%h '/var/folders/g_/kythn1dx4fbbry5npb4jx1cr0000gn/T/thing 1:2:3:20140610-41978-ksy5e9.PNG[0]'
[2014-06-10 13:54:47] INFO    [paperclip] An error was received while processing: #<Paperclip::Errors::NotIdentifiedByImageMagickError: /var/folders/g_/kythn1dx4fbbry5npb4jx1cr0000gn/T/thing 1:2:3:20140610-41978-ksy5e9.PNG is not recognized by the 'identify' command.>
[2014-06-10 13:54:47] INFO    Command :: identify -format %wx%h '/var/folders/g_/kythn1dx4fbbry5npb4jx1cr0000gn/T/thing 1:2:3:20140610-41978-ksy5e9.PNG[0]'
[2014-06-10 13:54:47] INFO    [paperclip] An error was received …Run Code Online (Sandbox Code Playgroud) 我是Rails的新手并使用Paperclip,我已经在我的模型上设置了它没有问题.我只是不喜欢它现在为我的图像生成的路径(:root_path/system/users/avatars/000/000/001)我甚至不理解它.如何将我的图像的默认路径修改为更友好的?我如何散列图像名称?
paperclip ×10
ruby-on-rails ×10
ruby ×3
amazon-s3 ×1
file-upload ×1
mime-types ×1
mongodb ×1
omniauth ×1
zip ×1