Как сохранить новый объект и его новый «has_many polymorphic» дочерний элемент во вложенной форме - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть три модели ...

class Product
  has_many :master_questions
  has_many :custom_questions
  has_many :rules
  has_many :conditions, through: :rules
  accepts_nested_attributes_for :custom_questions
  accepts_nested_attributes_for :rules

end

class MasterQuestion      
  has_many :conditions, as: :conditionable
end

class CustomQuestion
  belongs_to :product
  has_many :conditions, as: :conditionable
end

class Rule
  belongs_to :product
  has_many :conditions
  accepts_nested_attributes_for :conditions
end

class Condition
  belongs_to :rule
  belongs_to :conditionable, polymorphic: true 
end

В моей таблице условий есть столбцы для:

conditionable_id :uuid
conditionable_type :string

Я использую Vue в качестве внешнего интерфейса, поэтому яне использую форму Rails, но я хотел бы иметь возможность создавать и пользовательские вопросы и условия и связывать их одновременно.В настоящее время я вручную присваиваю идентификаторы после сохранения, но это выглядит довольно странно и вызывает некоторые побочные эффекты.

Мой метод ручного назначения выглядит примерно так ...

def assign_conditionable_ids
  conditions.each do |condition|
    conditionable_class = condition.class.name.constantize
    conditionable = conditionable_class.find_by(name: condition.conditionable_name)
    condition.update(conditionable_id: conditionable.id)
  end
end

Любые лучшие методы для обработки этого (назначить идентификаторы перед сохранением?, Используя методы сборки?, Что-то еще?) Или, может быть, есть способ лучше настроить ассоциации, параметры или контроллеры, чтобы я мог автоматически назначить CustomQuestion какCondition conditionable?

...