pra*_*oga 1 paperclip ruby-on-rails-3
我使用附件模型作为多态关联.如何根据关联更改路径和url参数.
附件模型
class Attachment < ActiveRecord::Base
belongs_to :user
belongs_to :attachable, :polymorphic => true
has_attached_file :attachment,
:url => "/attachments/:id/:basename.:extension",
:path => ":rails_root/public/attachments/:id/:basename.:extension",
:default_url => "/attachments/original/no-file.txt"
end
Run Code Online (Sandbox Code Playgroud)
项目模型
class Project < ActiveRecord::Base
...
has_many :attachments, :as => :attachable, :dependent => :destroy
end
Run Code Online (Sandbox Code Playgroud)
客户
class Client < ActiveRecord::Base
...
has_many :attachments, :as => :attachable, :dependent => :destroy
end
Run Code Online (Sandbox Code Playgroud)
以下路径文件保存正常.
:path => ":rails_root/public/attachments/:id/:basename.:extension",
Run Code Online (Sandbox Code Playgroud)
但我需要保存基于关联的文件,为此如何将参数传递给'path'.'attachable_type'定义了哪个关联上传文件所属
/attachments/project/
/attachments/client/
Run Code Online (Sandbox Code Playgroud)
您可以使用Paperclip Interpolations.插值允许您调用方法来确定路径的一部分的值.
class Attachment < ActiveRecord::Base
belongs_to :user
belongs_to :attachable, :polymorphic => true
Paperclip.interpolates :attached_to do |attachment, style|
attachment.instance.attachable.class.to_s.downcase
end
has_attached_file :attachment,
:url => "/attachments/:id/:basename.:extension",
:path => ":rails_root/public/attachments/:attached_to/:id/:basename.:extension",
:default_url => "/attachments/original/no-file.txt"
end
Run Code Online (Sandbox Code Playgroud)