Ruby on rails 具有多表继承和单表继承

Ruby on rails 具有多表继承和单表继承,ruby-on-rails,has-many,single-table-inheritance,Ruby On Rails,Has Many,Single Table Inheritance,我在两个实体之间有很多关系,feed和post。我也有特定类型的帖子、视频和照片。这是使用单表继承在数据库中构建的 现在我的提要模型指定了提要和帖子(包括子类型)之间的许多关系 类提要

我在两个实体之间有很多关系,feed和post。我也有特定类型的帖子、视频和照片。这是使用单表继承在数据库中构建的

现在我的提要模型指定了提要和帖子(包括子类型)之间的许多关系

类提要

有没有更好、更传统的方法来说明这一点?或者我所拥有的是最简单的吗?

这几乎是你能做的最简单的了


好吧,如果照片可以像视频一样处理,那么也许你可以取消STI,使用命名作用域为不同类型的内容提供访问器。

如果我理解正确,你有帖子,帖子可以是视频或照片。正如Jaryl所说,您所拥有的可能是最容易理解/处理的,但是,如果您想获得灵感,可以使用单表继承或多表关联

STI-示例(来自使用Rails的敏捷Web开发第3版)

然后你可以通过person找到它

x = Person.find_by_name('John Doe')
x.class #=> Customer
x.email #=> john@doe.com
x.balance #=> 78.29
x.some_customer_class_method # will work because the Person.find method returned a Customer object
所以你本来可以

class Post < ActiveRecord::Base
end
class Photo < Post
end
class Video < Post
end
class Post
然后你可以通过Post找到它们。所有,但你会得到照片和视频对象(和Post对象,如果你的帖子不是照片或视频)


别忘了字符串:在db表中键入

我同意问题中的示例非常简单。它已经在使用STI,并明确说明了关联

此外,您可以稍后删除STI,并将:照片和:视频拆分到各自的表中,而无需更改提要模型的代码。得分

我试图弄清楚如何将STI作为子对象,因此,在给定的示例中,我将如何对“Person Bowns\u to:company”和“company has\u many:persons”进行编码?
Customer.create(:name => 'John Doe', :email => 'john@doe.com', :balance => 78.29)
x = Person.find_by_name('John Doe')
x.class #=> Customer
x.email #=> john@doe.com
x.balance #=> 78.29
x.some_customer_class_method # will work because the Person.find method returned a Customer object
class Post < ActiveRecord::Base
end
class Photo < Post
end
class Video < Post
end