我一直在使用轨道中的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
答案 0 :(得分:2)
您需要在products表中添加“type”列,以便ActiveRecord可以区分不同类型的实例。此列应具有字符串类型,如:
create_table :products do |t|
# your other columns
t.string :type
end
答案 1 :(得分:0)
答案在于如何保存对象。你可能将它们保存为Foo或Bar,而不是作为产品应该是你应该的。当我像你一样使用继承的模型时,我通常只是继承公共方式来识别他们的数据。
所以我会举例,一个问题,以及两种不同类型的问题,如语法和视觉,都会继承问题。但我会在QuestionsController中将Object保存为问题。
就像你应该使用ProductsController保存对象一样。