【问题标题】:how to avoid repetition with identical models in rails如何避免在rails中重复使用相同的模型
【发布时间】:2013-09-20 18:34:19
【问题描述】:

在我的项目中,我有两个模型,它们具有相同的属性、方法并且一切都相同。

目前它们位于 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 数据库。

【问题讨论】:

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


【解决方案1】:

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

self.abstract_class = true

你也可以使用 mixins。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 2020-10-17
    • 2011-03-04
    相关资源
    最近更新 更多