Ruby On Rails - 默认object_type取决于模型

时间:2016-03-07 20:20:01

标签: ruby-on-rails ruby

假设我有一个Post模型,可以是文章或视频。

这是我的帖子模型:

Post(id :integer, user_id :integer, post_type :string, created_at :datetime, updated_at :datetime)

因此,我有:

  1. class Article < Post
  2. class Video < Post
  3. 是否有可以添加到Aricle和Video模型的特定语法,以便我可以执行以下操作:

    1. Article.create,自动将post_type设置为"article"
    2. Article.all,仅显示post_type == "article"
    3. 的帖子

      视频模型也是如此。

2 个答案:

答案 0 :(得分:2)

您可以使用单表继承(STI)。

您可以将列type更改为rails,因为它接近class Post < ActiveRecord::Base self.inheritance_column = 'post_type' end class Article < Post end class Video < Post end 默认值。

或者,您可以按如下方式定义自定义inheritance_column:

rails

然后Article负责在Videotype列中存储post_type或{{1}}个信息。

有关详细信息,请参阅STI

答案 1 :(得分:0)

在文章模型中添加此项以进行自动post_type分配:

def initialize
  super
  self.post_type = :article
end

然后还添加此默认范围以进行自动过滤:

default_scope -> { where(post_type: :article) }

将相同内容添加到视频模型中,但更改:article to:video。