Как работать с полями из таблицы соединений в отношениях «многие ко многим»? - PullRequest
0 голосов
/ 02 февраля 2020

У меня обычное отношение «многие ко многим»:

class Post < ApplicationRecord
  has_many :posts_and_images
  has_many :images, through: :posts_and_images
end

class PostsAndImage < ApplicationRecord
  belongs_to :post
  belongs_to :image
end

class Image < ApplicationRecord
  has_many :posts_and_images
  has_many :posts, through: :posts_and_images
end

Я добавил поле в таблицу posts_and_images. И теперь я не могу понять, как я могу работать с этим полем.

Например, я добавил поле description в таблицу posts_and_images. То есть это поле с уникальным описанием для каждого изображения каждого сообщения.

Я хочу работать с этим полем следующим образом:

- @post.images.each do |image|
  / ...
  = content_tag :div, image.description

Скажите, пожалуйста, как мне достичь этот результат?

1 Ответ

1 голос
/ 02 февраля 2020

Вы хотите начать с именования модели соединения в соответствии с соглашениями. PostsAndImage просто странно во всех отношениях.

class Post < ApplicationRecord
  has_many :post_images
  has_many :images, through: :post_images
end

class PostImage < ApplicationRecord
  belongs_to :post
  belongs_to :image
end

class Image < ApplicationRecord
  has_many :post_images
  has_many :posts, through: :post_images
end

Но вы могли бы, вероятно, придумать более подходящие имена, такие как attachment, media и т. Д. c.

Вместо итерации по images вы хотите перебрать post_images:

- @post.post_images.each do |post_image|
  = content_tag :div, post_image.description
  # you can get the image with post_image.image
...