Ruby on rails Rails:类似的类

Ruby on rails Rails:类似的类,ruby-on-rails,ruby,ruby-on-rails-3,oop,inheritance,Ruby On Rails,Ruby,Ruby On Rails 3,Oop,Inheritance,我正在使用Rails创建一个留言板网站。我有专题课和博士后课。 很容易注意到两个类内容、标题、用户id之间的相似性 Rails在这种情况下的最佳实践是什么? 主题应该从帖子继承吗?它是如何工作的 我建议查看,它允许多个模型共享同一个数据库表,通过类型列进行区分 我通过快速搜索找到了一些关于这个主题的文章: 我建议查看,它允许多个模型共享同一个数据库表,通过类型列进行区分 我通过快速搜索找到了一些关于这个主题的文章: 在很大程度上,这要视情况而定。如果它们有非常相似的表结构和/或重复的方法,我会选

我正在使用Rails创建一个留言板网站。我有专题课和博士后课。 很容易注意到两个类内容、标题、用户id之间的相似性

Rails在这种情况下的最佳实践是什么? 主题应该从帖子继承吗?它是如何工作的

我建议查看,它允许多个模型共享同一个数据库表,通过类型列进行区分

我通过快速搜索找到了一些关于这个主题的文章:

我建议查看,它允许多个模型共享同一个数据库表,通过类型列进行区分

我通过快速搜索找到了一些关于这个主题的文章:


在很大程度上,这要视情况而定。如果它们有非常相似的表结构和/或重复的方法,我会选择STI。但是,如果类有不同的外键,我通常不使用这种方法

另一方面,如果它们有一些共同的特性,但它们本身的类却非常不同,我会将这些共同的代码提取到一个模块中,基本上是一个mixin。
如果您需要更大的灵活性,您可能希望使用一个或甚至将常见模式提取到gem中。

在大多数情况下,这取决于具体情况。如果它们有非常相似的表结构和/或重复的方法,我会选择STI。但是,如果类有不同的外键,我通常不使用这种方法

另一方面,如果它们有一些共同的特性,但它们本身的类却非常不同,我会将这些共同的代码提取到一个模块中,基本上是一个mixin。 如果您需要更大的灵活性,您可能希望使用一个或甚至将常见模式提取到gem中。

模块混合:只需在任何类中包含此模块即可

继承STI:这些类必须使用相同的表

多态性:您必须为每个类使用不同的表

在我看来,一般来说很难回答什么是最佳实践,因为这取决于具体情况。在某些情况下,你甚至可能希望使用组合,但愿如此

我会坚持使用模块混合,因为它简单灵活。如果您认为由于有两个单独的表,您将大量重复编写查询,那么请尝试继承STI。从经验来看,多态性肯定会让人头疼,如果你不熟悉的话,会有大量的陷阱,所以可能不值得花两门课

# Heres one way to set up Inheritance (STI) on a table called 'contents'
class Content < ActiveRecord::Base
    attr_accessible :content, :title
    belongs_to :user
end

class Topic < Content
end

class Post < Content
end

Content.all             # => query topics and posts
#Post.all + Topic.all   # => query topics and posts without STI (doublewriting query)

Post.all    # => only query posts
Topic.all   # => only  topics
一般Rails最佳实践?K eep I t S imple S tupid

模块混合:只需在任何类中包含此模块

继承STI:这些类必须使用相同的表

多态性:您必须为每个类使用不同的表

在我看来,一般来说很难回答什么是最佳实践,因为这取决于具体情况。在某些情况下,你甚至可能希望使用组合,但愿如此

我会坚持使用模块混合,因为它简单灵活。如果您认为由于有两个单独的表,您将大量重复编写查询,那么请尝试继承STI。从经验来看,多态性肯定会让人头疼,如果你不熟悉的话,会有大量的陷阱,所以可能不值得花两门课

# Heres one way to set up Inheritance (STI) on a table called 'contents'
class Content < ActiveRecord::Base
    attr_accessible :content, :title
    belongs_to :user
end

class Topic < Content
end

class Post < Content
end

Content.all             # => query topics and posts
#Post.all + Topic.all   # => query topics and posts without STI (doublewriting query)

Post.all    # => only query posts
Topic.all   # => only  topics
一般Rails最佳实践?K eep I t S imple S tupid