【问题标题】:paperclip custom :path and :url回形针自定义 :path 和 :url
【发布时间】:2010-10-28 09:13:36
【问题描述】:

我在尝试使用回形针自定义 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 自定义路径和 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"

谢谢

【问题讨论】:

  • 你能在这里显示你的插值代码吗...也许那里有问题

标签: ruby-on-rails path paperclip


【解决方案1】:

网址中有这样的内容:

: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 变量。

希望这会有所帮助。

【讨论】:

  • 谢谢,但我已经有了很好的插值。我有一个多态的资产模型,所有者可以是用户(因为是化身)、服装或敷料。我想根据文件所有者有不同的路径。此时,当我想添加服装资产时效果很好,图片放在“/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】:

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

【讨论】:

    猜你喜欢
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    • 2011-08-02
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    相关资源
    最近更新 更多