2

如何复制带有蜻蜓图像的 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 %>

当我呈现表单时,图像会显示,但在提交时,图像会被清除。

一件事,我想确保它们实际上是不同的图像,所以如果我编辑原始记录,它不会影响副本。

4

1 回答 1

2

以下是我如何让它工作,覆盖对象的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行为,但这会导致原始对象的文件被删除。上述解决方案终于为我解决了问题。

于 2013-11-04T21:42:07.270 回答