我目前正在通过一个小小的个人项目(最好的学习方式)来学习rails。我在模型关联方面遇到了一些问题。经过一天的搜索,我无法找到问题的答案。
我有3件事要管理:帖子(比如博客),画廊和图片。 我想做的是:
修改:我在创建(或编辑)帖子或图库时不会上传图片。基本上,当我创建(或编辑)帖子或图库时,我会想要显示存储在数据库中的所有图像,并选择要在图库中添加的图像(或作为帖子的主要图像。)
我试图找出最佳方法。
我现在拥有的(并且有效)是每个数据的3个模型(发布,图库和图像)和3个模型连接表( PostsGallery , PostsImage 和 GalleriesImage 。)
模型/ post.rb
class Post < ActiveRecord::Base
has_many :posts_images
has_many :images, through: :posts_images
has_many :posts_galleries
has_many :galleries, through: :posts_galleries
模型/ gallery.rb
class Gallery < ActiveRecord::Base
has_many :galleries_images
has_many :images, through: :galleries_images
has_many :posts_galleries
模型/ image.rb
class Image < ActiveRecord::Base
has_many :galleries_images
has_many :posts_images
对于连接表:
模型/ posts_gallery.rb
class PostsGallery < ActiveRecord::Base
belongs_to :post
belongs_to :gallery
模型/ posts_image.rb
class PostsImage < ActiveRecord::Base
belongs_to :post
belongs_to :image
模型/ galleries_image.rb
class GalleriesImage < ActiveRecord::Base
belongs_to :gallery
belongs_to :image
我无法创建 has_one 联盟,只将一个图片链接到帖子模型,与图库相同。我不知道我失败的地方,但我有错误。所以我不得不在代码中使用一些技巧来存储帖子主图像和帖子库的一个条目。它不是很好,但它确实有效,我暂时会这样做。
使用我在控制器中的代码,当我删除图像时,连接表中的条目( galleries_images 和 posts_images )也会被删除。删除图库时,删除了 galleries_images 和 posts_galleries 表中的条目,等等。
一切都像我想要的那样,但我不知道这是否是一种很好的方式,而且我还在努力寻找另一种方式。我已经查看了多态关联,但我无法找到有关如何满足我的要求的解释。
如果有人有想法并且可以解释(做出我想做的事情的好方法),我会非常感激!
感谢所有阅读此帖的人!
答案 0 :(得分:1)
无需加入模型,请定义您的关联:
<强> post.rb 强>
has_one :main_image, class_name: Image, as :imagesable.
belongs_to :gallery
<强> gallery.rb 强>
has_many :images, as: imageable
image.rb (多态)
belongs_to :imageable, polymorphic: true
要详细了解关联,请按照link
进行操作