我有一个“事务”(扩展ActiveRecord :: Base).我有两种不同类型的交易,即“购买”或“捐赠”.两者之间有足够的重叠,因此不需要创建两个单独的数据库表,因此我只有一个表用于具有“item_type”列的事务.
但是,购买和捐赠有不同的方法和验证,因此将它们分成两个不同的控制器和模型是有意义的.我没有创建ActiveBase模型(减去表格),而是尝试为每个模型使用模块.
以下是Purchase模块的外观.
module Purchase def self.included(base) base.validates :amount,:presence => true end def testing "testing" end end
以下是如何创建一个:(此代码位于Purchases控制器的create操作中)
@purchase = Transaction.new(params[:purchase]).extend(Purchase)
我可以打电话给@ purchase.testing,然后返回“测试”.但是,该验证尚未运行.
如果我在交易模型上以传统方式包含模块,使用“包含购买”,那么它们就可以工作.
我有什么想法可以让这个工作流程发生?我跟着这个:http://paulsturgess.co.uk/articles/84-how-to-include-class-and-validation-methods-using-a-module-in-ruby-on-rails