rails 模型不同 post 类型

rails model different post types

我想为不同的 post 类型建模

ImagePostVideoPostTextPost。它们都有不同的内容

我打算使用 post has_many 多态但 rails 不支持它

之前的 Whosebug post 将我指向 has_many_polymorphs gem 但已弃用

我需要能够 post 不同的 post 类型并在实例中检索它们并在 Feed 上显示它们 例如

@posts.each do .. 
  if type == video ... 
  elseif type == image ....

我是 rails 的新手,非常感谢您的帮助。

考虑执行以下操作

class Post  < ActiveRecord::Base
    # Create the an association table and add additional info on the association table, description, etc etc.
    has_many :images, through: image_posts
    has_many :image_posts
end

class Image < ActiveRecord::Base
   # Image specific
end

这样做,@post.image_posts.count > 0表示有多个image_posts.

或者你也可以通过多态关系来实现:

class VideoPost < ActiveRecord::Base
  belongs_to :postable, polymorphic: true
end

class ImagePost < ActiveRecord::Base
  belongs_to :postable, polymorphic: true
end

class Feed < ActiveRecord::Base
  has_many :posts, as: :postable
end

在这种情况下,@feed.posts.each 将检查 postable_type,这是模型类型。

使用Post模型的单一table继承

 class class Post  < ActiveRecord::Base
  .....
 end

比继承这个 Post 模型到这些模型中。

class VideoPost < Post

end

class ImagePost < Post
end

在迁移时,您需要为 post 的不同类型创建一个类型列。有关详细信息,请查看此 blog post

STI 是必经之路。我想这三种类型的列至少应该相同或相似。所以单层继承是最好的选择。