witam
mam kilka modeli powiazanych ze sobą relacją has many, Survey->Page->Group->Question, każde ma dodaną akceptację zagniezdżonych atrybutów dla modelu dziecka. np. w modelu Page mam
accepts_nested_attributes_for :groups, :reject_if => lambda { |g| g[:title].blank? }, :allow_destroy => false
Stworzyłem sobie gotowy szablon w YAML, który odwzorywuje parametry które przesyłamy np z formularza z zagniezdzonmi atrybutami i zapisałem w bazie, przykładowo
survey:
title: jakis tytul
description: jakis opis
pages_attributes:
0:
title: Strona pierwsza
groups_attributes:
0:
title: grupa 1.1
questions_attributes:
0:
title: pytanie 1.1.1
question_type: "ShortText"
W logu jest transakcja, ładnie próbuje dodać survey, page i group ale wywala sie przy question. Problemem jest to że pole question_type jest użyte jako typ klasy dla STI, np ShortText < Question i wywala mi warning oraz później błąd
WARNING: Can't mass-assign these protected attributes: question_type
...
ActiveRecord::StatementInvalid (Mysql::Error: Column 'question_type' cannot be null: ..
mimo że question_type jest napewno ustawiony w tablicy uzyskanej z YAMLa. Czy da się to jakoś zrobić unikając parsowania całej tablicy i tworzenia po kolei obiektów dla każdego poziomu ?
Chyba że ktoś ma całkiem inne lepsze rozwiązanie żeby sobie przechować w bazie taki szablon powiązanych obiektów ?