Rails - 如何以正确的方式处理多个关联

时间:2015-12-03 19:37:40

标签: ruby-on-rails model associations

我目前正在通过一个小小的个人项目(最好的学习方式)来学习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 表中的条目,等等。

一切都像我想要的那样,但我不知道这是否是一种很好的方式,而且我还在努力寻找另一种方式。我已经查看了多态关联,但我无法找到有关如何满足我的要求的解释。

如果有人有想法并且可以解释(做出我想做的事情的好方法),我会非常感激!

感谢所有阅读此帖的人!

1 个答案:

答案 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

进行操作