С помощью скрепки, как я могу изменить расположение изображения на формат папки ": parent_model_id /: id"? - PullRequest
7 голосов
/ 28 декабря 2010

Учитывая, что у меня есть модель Listing , которая имеет много изображений , и каждое изображение имеет одно вложение , как я могу получитьlist_id будет частью структуры папок?

Примерно так: system / photos / [перечисление_id] /: id

Я знаю, что использование: id выведет идентификатор записи изображения.

Вот что у меня сейчас есть:

class Image < ActiveRecord::Base
belongs_to :listing #Rails ActiveRecord Relation. An image belongs to a post. 

# paperclip data
has_attached_file :photo, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :url => "/public/system/:class/:attachment/:id/:style_:filename"

end

Ответы [ 3 ]

7 голосов
/ 29 декабря 2010

Ах, я наконец понял это. Мне нужно было использовать Paperclip.interpolates .

Это сообщение от thinkbot вроде объясняет это, но оно немного устарело.

Сначала создайте файл config / initializers / paperclip.rb и добавьте следующее:

Paperclip.interpolates :listing_id do |attachment, style|
  attachment.instance.listing_id # or whatever you've named your User's login/username/etc. attribute
end

Это означает, что теперь в моей модели изображений я могу ссылаться на : перечисление_id , например, так:

class Image < ActiveRecord::Base
    belongs_to :listing #Rails ActiveRecord Relation. An image belongs to a post. 

    # paperclip data
    has_attached_file :photo, :styles => { :medium => "300x300>", :thumb => "100x100>" }, 
    :url => "/system/:attachment/:listing_id/:id/:style_:filename" #location where to output the server. :LISTING_ID is defined in config/initializers/paperclib.rb

end

PS: вам нужно перезагрузить сервер , чтобы изменения в initializers.rb вступили в силу.

1 голос
/ 28 декабря 2010

Поскольку у вас есть belongs_to отношение на вашей Image модели, вы просто должны иметь возможность использовать listing_id как часть конфигурации скрепки:

has_attached_file :photo, 
    :styles => { :medium => "300x300>", :thumb => "100x100>" }, 
    :url => "system/photos/:listing_id/:id"
1 голос
/ 28 декабря 2010

вам нужно передать атрибут url и path.посмотрите на этот блог Thinkbot пост за помощью.То, как у вас это близко, но вам нужно передать перечисление_идентификатора, а я:

...