我想在我的应用程序中应用逻辑删除(而不是永久删除已被标记为已删除的记录)。我已将可用列添加到所有默认值为 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 extending 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 method
abstract_class?' for Object:Class(NoMethodError)
答案 0 :(得分:1)
尝试default_scope where(:available => true)
。
答案 1 :(得分:0)
我认为monkeypatching ActiveRecord::Base
不是要走的路。也许您应该尝试创建一个模块,当您在模型中包含/扩展时,可以无缝地创建这些功能。