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.

ActiveRecord::Base を拡張する参照Railsを使用して、monkey patch を使用して上記を行うことにしました。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:abstract_class class_of_active_record_descendant': undefined method?」オブジェクト: クラス (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 に答える