回形针自定义:路径和:url

时间:2010-10-28 09:13:36

标签: ruby-on-rails path paperclip

我在尝试使用paperclip自定义has_attached_file的:path和:url选项时遇到了一些问题:

我有一个名为“Asset”的多态类,它有:

class Asset < ActiveRecord::Base

  belongs_to :file_owner, :polymorphic => true

  has_attached_file :picture, :styles => { ...},
             :url => "/attachments/user_:user/dressing_:dressing/garment_:garment/category_:category/:basename_:style.:extension",  
             :path => ":rails_root/public/attachments/user_:user/dressing_:dressing/garment_:garment/category_:category/:basename_:style.:extension"  
end

插值效果很好,但我想根据file_owner_type自定义路径和网址

例如,如果我想要用户的图片路径,我想要

:path => ":rails_root/public/attachments/user_:user/:basename_:style.:extension

感谢您的帮助

修改 : 我想我没有正确解释自己。我已经创建并且运行良好的插值。

我有一个多态的资产模型,所有者可以是用户(用于化身),服装或敷料。  我希望有一个不同的路径,具体取决于文件所有者。  在这个时候,当我想要添加服装资产时,效果很好,图片放在

"/attachments/user_x/dressing_y/garment_z/category_u/something_style.jpg"

但如果我只想要一张用户图片,这条路径会将头像放入

"/attachments/user_x/dressing_/garment_/category_/something_style.jpg"

而我想把它放在

"/attachments/user_x/something_style.jpg"

感谢

2 个答案:

答案 0 :(得分:10)

网址中的内容如下:

:url => "/attachments/:path/:basename_:style.:extension",  

然后在插值中:

Paperclip.interpolates :path do |attachment, style|
  if attachment.instance.file_owner_type == User.class.name
    # first set the _user variable (something like self.owner.id.to_s) 
    return "user_" + _user
  else
    # first set the _user, _dressing, _garmet, _category variables from your models
    return "user_#{_user}/dressing_#{_dressing}/garment_#{_garmet}/category_#{_category}/"
  end
end

请注意,您需要从模型中设置_user,_dressing,_garmet,_category变量。

希望这会有所帮助。

答案 1 :(得分:0)

在定义的插值中尝试:attachment.instance.file_owner.class.downcase