我想模拟不同的帖子类型
ImagePost
VideoPost
TextPost
。它们都有不同的内容
我将使用post has_many polymorphic,但rails不支持它
之前的stackoverflow帖子向我指出了has_many_polymorphs gem但不推荐使用
我需要能够发布不同的帖子类型并在实例中检索它们在Feed上显示它们 例如
@posts.each do ..
if type == video ...
elseif type == image ....
我是rails的新手,所以感谢您的帮助。
答案 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是要走的路。我想这三种类型的列至少应该相同或相似。因此,单个故事继承将是最佳选择。