2015-01-08 6 views
1

У меня есть приложение с тремя моделями. На самом высоком уровне является JobSpecRails - невозможно создать полиморфную вложенную модель

Это имеет полиморфный ассоциацию с job_template, один из которых является GooddataExtract шаблон

class GooddataExtract < ActiveRecord::Base 
    has_one :job_spec, as: :job_template, inverse_of: :job_template 
    has_many :gooddata_reports, dependent: :destroy, inverse_of: :gooddata_extract 
    accepts_nested_attributes_for :gooddata_reports, reject_if: :all_blank, allow_destroy: true 
end 

, который в свою очередь, имеет отношение один-ко-многим с микросхемой GooddataReport

class GooddataReport < ActiveRecord::Base 
    belongs_to :gooddata_extract, inverse_of: :gooddata_report 
end 

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

JobSpec.create(job_template_type: 'GooddataExtract', job_template_attributes: { gooddata_pid: 'abcdefg', gooddata_reports_attributes: { '1' => { name: 'george', report_oid: '123456' } } }) 

В JobSpecGooddataExtract и записи будут созданы только штрафом, но не GooddataReport записи. Нет сообщений об ошибках или что-то еще, они просто не могут быть созданы.

Любые идеи, что мне может не хватать?

ответ

0

Нашли это! К сожалению, я не представил полный пример, необходимый для выяснения проблемы. Я забыл о методе build_job_template, который был в классе JobSpec. Это способ, которым я получал accepts_nested_attributes_for для работы с полиморфной моделью в соответствии с accepts_nested_attributes_for with belongs_to polymorphic. Я ввел вариант ответа SO, который предотвращал передачу вложенных атрибутов по иерархии. После решения этой проблемы он работает как ожидалось!

class JobSpec < ActiveRecord::Base 
    belongs_to :job_template, polymorphic: true, dependent: :destroy, inverse_of: :job_spec 
    accepts_nested_attributes_for :job_template 

    def build_job_template(params) 
    klass = job_template_type.constantize 
    self.job_template = klass.new(params) 
    end 
end 
+0

Как и где определяется и задается 'job_template_type'? – rodamn

Смежные вопросы