Zupełnie nowe miejsce w grze Rails.Zapisywanie modelu zagnieżdżonego w Railsach 4
Jeden z modeli jest zależny od drugiego w skojarzeniu has_many/belongs_to.
Zasadniczo, podczas tworzenia "Posta" w mojej aplikacji, użytkownik może również dołączyć "Obrazy". Idealnie są to dwa osobne modele. Gdy użytkownik wybiera zdjęcie, niektóre JavaScript przesyła je do Cloudinary, a zwrócone dane (identyfikator, szerokość, wysokość itp.) Są JSON uszeregowane i ustawione na ukrytym polu.
# The HTML
= f.hidden_field :images, :multiple => true, :class => "image-data"
# Set our image data on the hidden field to be parsed by the server
$(".image-data").val JSON.stringify(images)
I oczywiście, związek istnieje w moim modelu post
has_many :images, :dependent => :destroy
accepts_nested_attributes_for :images
i mojego modelu Obrazek
belongs_to :post
Gdzie gubię się, co zrobić z serializowanym danych obrazu w metodzie tworzenia kontrolera Post? Po prostu parsowania JSON i oszczędność nie tworzyć modele obrazu z danych podczas zapisywania (i nie czuje się w prawo):
params[:post][:images] = JSON.parse(params[:post][:images])
Wszystko to zasadniczo kulminuje do czegoś podobnego następujących parametrów:
{"post": {"title": "", "content": "", ..., "images": [{ "public_id": "", "bytes": 12345, "format": "jpg"}, { ..another image ... }]}}
Cały ten proces wydaje się nieco zawiły - co mam teraz zrobić i czy istnieje lepszy sposób na zrobienie tego, co próbuję zrobić w pierwszej kolejności? (Są też mocne parametry wymagane dla zagnieżdżonych atrybutów takich jak ta ...?)
EDIT:
W tym momencie mam ten błąd:
Image(#91891690) expected, got ActionController::Parameters(#83350730)
pochodzących z tej linii ...
@post = current_user.reviews.new(post_params)
Wygląda na to, że nie tworzy obrazów z zagnieżdżonych atrybutów, ale oczekuje się. (To samo dzieje się, gdy: autozapis jest dostępny lub nie).
Mam dokładnie ten sam numer – nduplessis
Mb może pomóc http://stackoverflow.com/questions/10878930/got-activerecordassociationtypemismatch-on-model-save – user2915517