【发布时间】:2019-08-23 01:48:19
【问题描述】:
我有 4 个模型
Class Post
has_many: videos
has_many: documents
has_many: checklists
end
还有这些模特belongs_to帖子
Class Video
end
Class Document
end
Class Checklist
end
样本记录看起来
id: 1, name 'sample post', media_type: 'video'
渲染单个帖子时非常困难,我需要每次检查条件是什么媒体类型并使用相应的模型属性
例如:
@posts.each do |post|
if @post.media_type =='video'
render :video_html
elsif @post.media_type =='document'
render :document_html
.....
....
end
我不能使用polymorphic association,因为视频、文档、清单有不同的字段。
请建议以更好的方式设计模型
我需要的是:
@post.media
应该返回类似polymorphic 工作方式的媒体。
【问题讨论】:
-
有什么问题?
-
有没有最好的方法来设计这个模型?
-
不可能根据您当前的层对您的模型层进行有意义的评论,并且没有解释它当前如何不适合您,或者您现有的架构是什么样的,或者您的任何用例是什么是。
-
只是在这里吐口水,但您可以在 Post 和 Video/Document 之间进行连接,可能称为 PostMedia。 PostMedia
belongs_to :media, polymorphic: true; belongs_to :post然后 Post 可以has_many :post_medias。在那里你也许可以做@post.post_medias. each { |post_media| post_media.media_type.eql?('Video') ? render :video_html .... }也许只是一个快速的想法:D
标签: ruby-on-rails ruby associations