Rails单表继承中模型之间的关系

时间:2012-08-19 21:32:43

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我一直在使用轨道中的STI,并且有关于将记录与特定模型相关联的问题。

假设我有一个具有以下架构的产品型号:

#  id         :integer          not null, primary key
#  url_name   :string(255)      not null
#  cover_img  :string(255)
#  created_at :datetime         not null
#  updated_at :datetime         not null

从这个产品模型中,我创建了2个继承的模型:

富:

class Foo < Product

end

栏:

class Bar < Product

end

假设我将记录保存到Foo(A),并将记录保存到Bar(B)。当我调用Product.all时,我希望得到所有记录A和B.但是当我调用Foo.all或Bar.all时,我希望分别仅检索A和B,但是当我调用Foo.all时会发生什么。或者Bar.all,我得到了我在调用Product.all时得到的结果。如何配置此关系以获得预期结果?

我正在使用rails 3.2.6和Ruby 1.9.3

2 个答案:

答案 0 :(得分:2)

您需要在products表中添加“type”列,以便ActiveRecord可以区分不同类型的实例。此列应具有字符串类型,如:

create_table :products do |t|
  # your other columns
  t.string :type
end

答案 1 :(得分:0)

答案在于如何保存对象。你可能将它们保存为Foo或Bar,而不是作为产品应该是你应该的。当我像你一样使用继承的模型时,我通常只是继承公共方式来识别他们的数据。

所以我会举例,一个问题,以及两种不同类型的问题,如语法和视觉,都会继承问题。但我会在QuestionsController中将Object保存为问题。

就像你应该使用ProductsController保存对象一样。