Я пытаюсь получить возможность передавать массив строк в has_many
ассоциацию, чтобы я мог перебрать их и создать экземпляр ассоциации.
У меня простая структура Task <-> TaskTag <-> Tag
И Task
, и Tag
имеют одно поле: title
Я хочу достичь возможности обновления с помощью такого вызова:
@task.update({:title=>"Updated Task Title", :tags=>["NewTag", "ExistingTag"]})
, чтобы он создавал и устанавливалтег с заголовком «NewTag» и набором «ExistingTag»
class Task < ApplicationRecord
attr_accessor :tags
before_save :set_tags, if: -> { self.tags.present? }
has_many :task_tags
has_many :tags, through: :task_tags
accepts_nested_attributes_for :tags
private
def set_tags
tag_instances = self.tags.map do |tag|
if tag.is_a?(String)
Tag.where(title: tag).first_or_create
else
tag
end
end
self.tags = tag_instances
end
end
Я добился того, что он создает экземпляр, если он не существует, но не создает TaskTag
экземпляр