考虑以下示例代码:
def Product < ActiveRecord::Base
end
def Book < Product
end
(我放弃了为这种关系寻找名称。我认为 Book 是“子模型”,而 Product 是“父模型”,但这是不正确的。例如,链接到另一个 Comment 模型对象的 Comment 模型对象是什么将是“子父”关系。如果您有更好的方式来描述我上面代码中模型之间的关系,欢迎您在这里写下来。无论如何,这并不是我在这里的真正原因.)
当然,使用上面的代码,Book 模型将与 Product 共享同一个数据库表,“products”。模型类型将作为字符串保存在表的“类型”列中。因此,调用 Product.create 将在表中插入一个类型值设置为“Product”的行,并且与 Book.create 一起使用将执行相同的操作,但值为“Book”。
然而,令我困惑的是,调用 Book.last 将返回类型为“Book”的最后一行,正如我所期望的那样,但 Product.last 将返回最后一行,无论是什么类型,包括“Product”和“Book, ” 尽管我希望只获得最后一个“产品”。
我尝试在 Product 中定义一个 default_scope,我在 Book 中覆盖它,但这会导致比它解决的问题更多的问题,并且弄乱了我在 Product 中由 Book 继承的命名范围。
有没有办法让 Product.last 返回“Product”类型的最后一个对象并避免任何“Book”类型的对象?
提前感谢您的回答。