обмен изображениями в объектах с carrierwave - PullRequest
3 голосов
/ 09 февраля 2012

У меня есть один оригинальный объект post.rb со следующими полями или атрибутами.

class Post
 include Mongoid::Document
 mount_uploader :posted, PostedUploader, mount_on: :posted_filename
 field :posted
 field :remote_posted_url

 attr_accessible :posted, :remote_posted_url
end

Затем я хочу создать копию из первого исходного объекта и поделиться изображениями для новогообъект.Затем я делаю:

attribs = @post.attributes.select {|a| %w(posted remote_posted_url).include? a }
new_post = Post.new attribs
new_post.save

Пока что все отлично работает с новым объектом, делюсь изображениями оригинала.Два объекта имеют одно и то же общее изображение с одинаковым путем.

Проблема заключается в том, что, если я удаляю исходный объект, объект-клон не может найти изображение, поскольку я удалил исходное сообщение.

Как я могу в моем объекте действия уничтожения с помощью обратного вызова before_destroy , проверить, используется ли изображение одним или несколькими объектами .

, если изображение, используя 2 или более объектов,

Не удалить изображение.

в противном случае, если изображение используется одним объектом,

Удалить изображение.

Это возможно?

Мне нужен метод, чтобы проверить эту проблему.

1 Ответ

3 голосов
/ 11 февраля 2012

Переопределить обратный вызов remove_posted, введенный CW в вашей модели:

class Post
  include Mongoid::Document
  mount_uploader :posted, PostedUploader, mount_on: :posted_filename
  field :posted
  field :remote_posted_url

  attr_accessible :posted, :remote_posted_url

  # override as to not delete if there's another model storing the same image
  def remove_posted!
    super unless Post.where(posted_filename: posted_filename).count > 1
  end
end

PS: Post.new(attribs).save должен копировать файл, а не использовать тот же, возможно, вам следует назначить файл.открыть (путь) к опубликованному столбцу, вставленному в загрузчик.

...