我有一个类似于博客的 Rails 项目,其中的帖子包含一组图像和一个特色图像。图片集是一种非常直接的 HABTM 关系,因为多个帖子可以共享同一张图片,一个帖子可以有很多图片,但特色图片有点麻烦。
每个帖子都应该只有一个特色图片,一个图片可以是多个帖子的特色图片,所以我的第一个想法就是颠倒关系,让图片has_many
发布和发布belong_to
图片,但这似乎有很多不同的问题. 首先,它不是很语义化。其次,post 控制器需要额外的代码来接受 image_id 的值,因为 Post.new 似乎不想接受 image_id 作为属性。
我的第二个想法——这是我目前要使用的一个——是在帖子和迁移中使用 HABTM 关系,并在limit: 1
帖子has_and_belongs_to_many :featured_images
和迁移中使用说明符。这个解决方案有效,但它似乎是 hack-ish。此外,这意味着我必须像这样访问特色图片,而不是. 更糟糕的是,我不禁认为这会损害数据库性能,因为它必须访问三个表而不是两个表,并且它必须在多对多表中搜索帖子 id,而不是通过 id 立即识别柱子。unique: true
t.belongs_to :post
post.featured_images.first
post.featured_image
那么,这是正确的方法还是有更好的方法?rails 有类似has_one
,的belongs_to_many
关系吗?