「トランザクション」があります (ActiveRecord::Base を拡張します)。「購入」または「寄付」という 2 種類のトランザクションがあります。2 つの別々のデータベース テーブルを作成する必要がないほど 2 つの間に十分な重複があるので、「item_type」列を持つトランザクション用のテーブルを 1 つだけ用意します。
ただし、購入と寄付には異なる方法と検証があるため、それらを 2 つの異なるコントローラーとモデルに分割することは理にかなっています。ActiveBase モデル (テーブルを除く) を作成する代わりに、これらのモデルごとにモジュールを使用しようとしています。
購入モジュールは次のようになります。
module Purchase
def self.included(base)
base.validates :amount,
:presence => true
end
def testing
"testing"
end
end
作成方法は次のとおりです (このコードは Purchases コントローラーの作成アクションにあります)。
@purchase = Transaction.new(params[:purchase]).extend(Purchase)
@purchase.testing を呼び出すことができ、「testing」が返されます。ただし、その検証は実行されていません。
「購入を含める」を使用して、トランザクションモデルに従来の方法でモジュールを含めると、それらは機能します。
このワークフローを実現する方法はありますか? 私はこれに少し従った:http://paulsturgess.co.uk/articles/84-how-to-include-class-and-validation-methods-using-a-module-in-ruby-on-rails