无法保存克隆记录

时间:2011-07-11 21:51:32

标签: ruby-on-rails ruby-on-rails-3

我试图在删除记录后提供撤消功能。为此,在删除记录之前,我将其克隆并将其放入会话中,如下所示:

session[:undo] ||= []
session[:undo] << record.clone

然而,当我后来做

rec = session[:undo][-1]
rec.save!

记录未保存。服务器控制台输出显示

(0.2ms)  BEGIN
[paperclip] Saving attachments.
(0.2ms)  COMMIT

这让我觉得它已保存,但它不在数据库中。我很迷茫。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

更稳定的方法是在数据库中使用“active”布尔标志,默认为true。删除记录时,只需将该标志更改为false即可。要撤消您,只需将其更改回true即可。

# models/attachment.rb
class Attachment < ActiveRecord::Base
  default_scope where(:active => true)

  def self.include_inactive
    unscoped
  end
end

# in your migration
def self.up
  change_table :attachments do |t|
    t.boolean :active, :default => true, :null => false
  end

  add_index :attachments, :active
end

self.include_inactive方法实际上只是为了清晰起见。它实际上只是unscoped的别名,它将重置忽略已删除记录的default_scope。例如,如果您希望在管理信息中心显示所有记录,则可以拨打Attachment.include_inactive

另请注意active列上的索引。由于大多数查询都包含where 'active' = 1,因此确保您的数据库可以轻松访问此信息非常明智。