rails模型不同的帖子类型

时间:2015-03-17 14:48:00

标签: ruby-on-rails rails-models

我想模拟不同的帖子类型

ImagePost VideoPost TextPost。它们都有不同的内容

我将使用post has_many polymorphic,但rails不支持它

之前的stackoverflow帖子向我指出了has_many_polymorphs gem但不推荐使用

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

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

我是rails的新手,所以感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

使用Post模型的单表继承

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

将此Post模型继承到这些模型中。

class VideoPost < Post

end

class ImagePost < Post
end

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

答案 1 :(得分:0)

考虑执行以下操作

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&gt; 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,而不是模型类型。

答案 2 :(得分:0)

STI是要走的路。我想这三种类型的列至少应该相同或相似。因此,单个故事继承将是最佳选择。