假设我有一个Post模型,可以是文章或视频。
这是我的帖子模型:
Post(id :integer, user_id :integer, post_type :string, created_at :datetime, updated_at :datetime)
因此,我有:
class Article < Post
class Video < Post
是否有可以添加到Aricle和Video模型的特定语法,以便我可以执行以下操作:
Article.create
,自动将post_type
设置为"article"
Article.all
,仅显示post_type == "article"
视频模型也是如此。
答案 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
负责在Video
或type
列中存储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。