Próbuję utworzyć obiekt ActiveRecord za pomocą żądania JSON. Jednak kontroler nie ustawi zmiennych przekazanych w parametrach w nowo utworzonym obiekcie. Przykładowo obiekt osoby ma dwa pola: imię i nazwisko.Kontroler Railsów nie akceptuje JSON?
JSON generowane przez funkcję JSON.stringify biblioteki json.org produkuje:
{"firstname" : "Joe" , "lastname" : "Bloggs"}
Jednak kontroler oczekuje JSON być w formie:
{ "Person" : {"firstname" : "Joe" , "lastname" : "Bloggs"} }
jestem świadomy że w normalnym toku zdarzeń (dla żądań HTTP) parametry dla żądania są zagnieżdżone pod nazwą klasy tworzonego modelu .
Akcja tworzyć w sterowniku jest:
def create
@person = Person.new(params[:person])
respond_to do |format|
if @person.save
flash[:notice] = 'Person was successfully created.'
format.html { redirect_to(@person) }
format.xml { render :xml => @person, :status => :created, :location => @person }
format.json { render :json => @person, :status => :created, :location => @person }
else
format.html { render :action => "new" }
format.xml { render :xml => @person.errors, :status => :unprocessable_entity }
format.json { render :json => @person.errors, :status => :unprocessable_entity }
end
end
end
Jaki byłby neatest sposobem dla kontrolera do przetwarzania żądań jako JSON generowane? Lub alternatywnie w jaki sposób generujesz "poprawny" JSON z obiektów JavaScript do przekazania do kontrolerów?
TIA, Adam
Czy to nadal działa w przypadku standardowych żądań HTML, czy też powinienem przekształcić żądania JSON w osobną metodę? – apchester
Nie. Naprawdę powinieneś przepisać swoje żądania JSON, aby przekazać te same parametry, które byłyby przekazywane za pomocą HTML. –
Dzięki Zach, Myślałem tak samo, ale chciałem mieć pewność co do najlepszej praktyki. Pozdrowienia, Adam – apchester