rails paperclip自定义上传网址路径

时间:2013-09-24 17:01:07

标签: ruby-on-rails ruby-on-rails-3

这是我的upload.rb

class Upload < ActiveRecord::Base
      belongs_to :post
      has_attached_file :upload,styles: { medium: ["500x400>",:jpg], thumb: ["100x100>",:jpg]},url: "/post_images/post_:postid/:style/:filename"

def postid
      self.post_id
end
end

我有一个post_id列。如belongs_to表示我将为一个帖子提供多个图像。但是在文件夹中保存文件而不是post_25。它存储为post_:postid

但是,如果我以:id的形式提供它,那么它正在发挥作用。

我该如何解决呢?任何人都可以帮忙解决这个问题。

2 个答案:

答案 0 :(得分:3)

您应该使用Paperclip's interpolations来实现此功能。首先,首先在初始化程序中定义插值:

# config/initializers/interpolations.rb
Paperclip.interpolates :postid do |attachment, style|
  'post_' + attachment.instance.post.id
end

然后,您可以直接在附件网址声明中使用:postid插值(请记住首先重新启动服务器):

# app/models/upload.rb
has_attached_file :upload,styles: { medium: ["500x400>",:jpg], thumb: ["100x100>",:jpg]},url: "/post_images/:postid/:style/:filename"

请注意,:postid 仅仅是您在模型中定义的实例方法 - Paperclip 独占利用插值来定义URL /路径中的动态变量声明。

答案 1 :(得分:1)

在我的一个模特中我有

Paperclip.interpolates :invoice_file_name do |attachment, style|
  attachment.instance.invoice_file_name
end

取自Github上的Paperclip wiki。