如何避免在轨道中使用相同型号重复

时间:2013-09-16 14:46:44

标签: ruby-on-rails ruby ruby-on-rails-3 inheritance activemodel

在我的项目中,我有两个具有相同属性,方法和一切相同的模型。

目前他们处于app / models /单独的rb文件中,并且重复了一些代码。

我想将所有代码导出到一个单独的文件中,并将两个文件引用到它,并具有模式DRY代码。

我尝试了以下内容,但它无效:

# app/models/order.rb
class Order < ActiveRecord::Base
  before_save { self.version += 1 }

  attr_accessible :order
  attr_accessible :filled_date

  validates :order, :presence => true
end

其中一个推荐订单是:

# app/models/real_order.rb
class RealOrder < Order
  belongs_to :User, inverse_of: :real_orders
end

但这不起作用,当我尝试使用模型时,我得到Could not find table 'orders'

另外我认为Orders不是真正的模型,所以app/models可能不是该文件的正确位置,尽管我不确定它应该在哪个目录中。

谢谢,

UPD1: 我最终想要实现的结构是我有两个相同的数据库表,有两个基于相同代码的独立模型。我想在一个单独的超类文件中只编写一次这样的代码。所以我在寻找DRY代码,而不是DRY数据库。

1 个答案:

答案 0 :(得分:2)

在模型之间共享代码有几种不同的方法。如果(对于您的问题域)使用继承(如上例所示),那么您需要在Order类中使用以下内容:

self.abstract_class = true

您也可以使用mixins。

以下是一个很好的问题:ruby inheritance vs mixins