如何用蜻蜓图像复制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 %>
当我呈现表单时,会显示图像,但在提交时,图像会被清除。
有一点,我想确保它们实际上是不同的图像,所以如果我编辑原始记录,它不会影响复制。
以下是我如何让它工作,覆盖对象的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
行为,但这导致原始对象的文件被删除。上面的解决方案终于帮了我一把。