rails - find_or_initialize в has_many через ассоциацию - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть набор классов для хештега, определенных следующим образом:

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

Был бы более идиоматический способ получить тот же результат, используя меньшее количество вызовов базы данных?

...