2010-10-28 64 views
9

我想定制一些问题:路径:网址选项has_attached_file用回形针:回形针定制:路径:URL

我有一个名为“资产”有一个多态类:

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

为实例的URL,如果我想在用户的图片路径,我想只是

: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"

感谢

+0

你可以在这里显示你的插值代码...也许这里有一个问题 – Rohit 2010-10-29 12:12:22

回答

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变量从你的模型。

希望这会有所帮助。

+0

Thx,但我已经有内插效果很好。 我有一个多态的资产模型,所有者可以是一个用户(为化身),一件服装或一件衣服。我想根据文件所有者拥有不同的路径。 在这个时候,当我想添加一件服装资产时,它的效果很好,图片放在“/附件/用户名/密码_y/garment_z/category_u/something_style.jpg”中,但如果我只想要一张用户图片,头像“/attachments/user_x/dressing_/garment_/category_/something_style.jpg”,而我想把它放在“/attachments/user_x/something_style.jpg”。 – guts 2010-10-28 10:07:31

+0

我已经根据问题中的说明更改了我的答案。 – 2010-10-29 08:05:26

+0

谢谢,这正是我正在寻找^ – guts 2010-11-03 16:07:20

0

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