пользовательский путь и URL-адрес скрепки для полиморфных ассоциаций - PullRequest
1 голос
/ 21 марта 2012

Я использую модель привязанности как полиморфную ассоциацию. Как изменить параметры пути и 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

Модель проекта

class Project < ActiveRecord::Base
 ...
 has_many :attachments, :as => :attachable, :dependent => :destroy
end

Клиент

class Client < ActiveRecord::Base
 ...
 has_many :attachments, :as => :attachable, :dependent => :destroy
end

Следующие файлы пути сохраняются в порядке.

:path => ":rails_root/public/attachments/:id/:basename.:extension",

но мне нужно сохранить файлы, основанные на ассоциации, как, для этого, как передать параметры в «путь». 'присоединяемый_тип' определяет, к какому файлу загрузки ассоциаций относится

/attachments/project/
/attachments/client/

Ответы [ 2 ]

6 голосов
/ 21 марта 2012

Вы можете использовать Интерполяция скрепки . Интерполяция позволяет вызывать метод для определения значения части пути.

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
0 голосов
/ 21 марта 2012
has_attached_file :attachment, :path => ":rails_root/public/attachments/#{lambda { |a| a.instance.images_path? ? 'project' : 'client' }}/:id/:basename.:extension"



def images_path?
    if your pretty condition  
      #return true
    else
      #return false 
    end
  end
...