0

我一直在使用 Rails 中的 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

4

2 回答 2

2

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

create_table :products do |t|
  # your other columns
  t.string :type
end
于 2012-08-19T21:53:41.677 回答
0

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

因此,例如,我将有一个问题,以及两种不同类型的问题,例如语法和视觉,它们都将继承问题。但我会将对象保存为 QuestionsController 中的问题。

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

于 2012-08-19T21:43:20.627 回答