Дублирующая запись с изображением драгоценного камня Стрекозы в Rails

Как мне дублировать объект ActiveRecord с изображением стрекозы?

У меня есть следующее.

модель:

class Event < ActiveRecord::Base

  image_accessor :thumbnail

  attr_accessible :thumbnail, :remove_thumbnail, :retained_thumbnail

  validates :thumbnail, presence: true
end

контроллер:

def clone
  @event = Event.find(1).dup
  render :new
end

Посмотреть:

<%= form_for @event do |f| %>
  <%= f.label :thumbnail %>
  <%= image_tag(@event.thumbnail.thumb('100x75').url) %>
  <label><%= f.check_box :remove_thumbnail %> Remove?</label>
  <%= f.file_field :thumbnail %>
  <%= f.hidden_field :retained_thumbnail %>
<% end %>

Когда я рендеринг формы, изображение отображается, но при отправке, изображение очищается.

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

1 ответ

Вот как я заставил это работать, переопределяя объект dup поведение:

def dup
  target = Event.new(self.attributes.reject{|k,v| ["id", "attachment_uid"].include?(k) })
  target.attachment = self.attachment
  target
end

Затем, когда вы звоните save на цели изображение будет скопировано в новое место.

Обратите внимание, что в первой строке я впервые попробовал target = super, чтобы использовать объект по умолчанию dup поведение, но это привело к удалению файлов исходного объекта. Приведенное выше решение, наконец, помогло мне.

Другие вопросы по тегам