Дублирующая запись с изображением драгоценного камня Стрекозы в 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
поведение, но это привело к удалению файлов исходного объекта. Приведенное выше решение, наконец, помогло мне.