У меня есть три модели ...
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
?