Я всегда писал подобный код:
class Post < ApplicationRecord
has_many :posts_and_images
has_many :images,
through: :posts_and_images,
dependent: :destroy do
def <<(image)
super(Array(image) - proxy_association.owner.images)
end
end
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,
dependent: :destroy
end
Я использую код с proxy_association
по мере необходимости. Я думаю, что в этом случае это не важно. Я просто показываю это так, чтобы была полная картина.
Теперь я решил еще раз изучить документацию и различные примеры, которые разные люди демонстрировали в своих блогах.
Итак, я нашел похожая опция (на основе моего предыдущего кода):
class Post < ApplicationRecord
has_many :posts_and_images,
dependent: :destroy
has_many :images,
through: :posts_and_images do
def <<(image)
super(Array(image) - proxy_association.owner.images)
end
end
end
class PostsAndImage < ApplicationRecord
belongs_to :post
belongs_to :image
end
class Image < ApplicationRecord
has_many :posts_and_images,
dependent: :destroy
has_many :posts,
through: :posts_and_images
end
В обоих примерах я запускал похожий сценарий, когда удалял пост или изображение. И, видимо, оба, когда они работают одинаково. По крайней мере, на первый взгляд, это так.
Не могли бы вы объяснить мне нюансы обоих примеров? Какой из них наиболее предпочтителен? Каковы плюсы и минусы каждого из них?