1

我想在我的应用程序中应用逻辑删除(而不是永久删除已标记为已删除的记录)。我已将可用列添加到默认值为true的所有表中。现在我想共同为所有模型编写以下代码。

1) Write the instance method which make 'available' column value false when user clicks on destroy link.
2) Merge the 'available=true' condition to all ActiveRecord's queries while fetching the records.

参考Rails 扩展 ActiveRecord::Base,我决定使用猴子补丁来做上面的事情。在 config/initializer/active_record_patch.rb 中创建猴子补丁文件:

class ActiveRecord::Base
   def inactive
      update_attribute(:available, false)
   end

   default_scope :available => true
end

添加 default_scope 时出现以下错误

/gems/ruby-1.9.2-p290/gems/activerecord-3.0.9/lib/active_record/base.rb:1212:in class_of_active_record_descendant': undefined methodabstract_class?对于对象:类(NoMethodError)

4

2 回答 2

1

试试default_scope where(:available => true)

于 2012-07-25T13:35:03.920 回答
0

我相信猴子补丁ActiveRecord::Base不是要走的路。也许您应该尝试创建一个模块,当您的模型中包含/扩展该模块时,可以无缝地创建此功能。

于 2012-07-25T13:36:09.057 回答