У меня есть набор классов для хештега, определенных следующим образом:
class Hashtag < ApplicationRecord
has_many :hashtag_references
end
class HashtagReference < ApplicationRecord
belongs_to :hashtag
belongs_to :hashtaggable, polymorphic: true
end
class Post < ApplicationRecord
has_many :hashtag_references, as: :hashtaggable
has_many :hashtags, through: :hashtag_references
end
Моя цель - прикрепить хештеги (заданные в виде массива строк) к Посту, не создавая новые хештеги, если name
уже существует или создает дубликат hashtag_reference, если к сообщению уже прикреплен хэштег.В настоящее время я делаю это с помощью «вложенного» find_or_initialize_by.
names.each do |name|
post.hashtag_references.find_or_initialize_by(hashtag: Hashtag.find_or_initialize_by(name: name)
end
Был бы более идиоматический способ получить тот же результат, используя меньшее количество вызовов базы данных?