Am'am o întrebare destul de simplă. Dar am't a găsit o soluție până acum.
Deci, aici's JSON string-am trimite la server:
{
"name" : "abc",
"groundtruth" : {
"type" : "Point",
"coordinates" : [ 2.4, 6 ]
}
}
Folosind noul permis de metoda, am'am:
params.require(:measurement).permit(:name, :groundtruth)
Acest lucru aruncă nici o eroare, dar a creat baza de date de intrare conține null
în loc de groundtruth valoare.
Daca am stabilit:
params.require(:measurement).permit!
Totul's-a salvat cum era de așteptat, dar, desigur, aceasta ucide securitate oferite de puternic parametri.
Am'am găsit soluții, cum de a permis tablouri, dar nu un singur exemplu, folosind obiecte imbricate. Acest lucru trebuie să fie posibil într-un fel, deoarece acesta ar trebui să fie destul de un caz de utilizare comună. Deci, cum funcționează?
La fel de ciudat ar suna, atunci când doriți să permiteți imbricate atribute specificați atributele de obiecte imbricate într-o matrice. În cazul tău ar fi
Update cum a sugerat de către @RafaelOliveira
params.require(:measurement)
.permit(:name, :groundtruth => [:type, :coordinates => []])
Pe de altă parte, dacă vrei imbricate de mai multe obiecte, apoi înfășurați-o într-un hash... astfel de prognoze
params.require(:foo).permit(:bar, {:baz => [:x, :y]})
Șine de fapt destul de bine de documentare pe aceasta: http://api.rubyonrails.org/classes/ActionController/Parameters.html#method-i-permit
Pentru clarificări suplimentare, te-ai putea uita la punerea în aplicare a "permis" și strong_parameters
în sine: https://github.com/rails/rails/blob/master/actionpack/lib/action_controller/metal/strong_parameters.rb#L246-L247
Am găsit această sugestie utilă în cazul meu:
def product_params
params.require(:product).permit(:name).tap do |whitelisted|
whitelisted[:data] = params[:product][:data]
end
end
Verifica asta link de Xavier's comentariu pe github.
Această abordare liste albe întreaga params[:măsurarea][:groundtruth] obiect.
Folosind întrebări originale atribute:
def product_params
params.require(:measurement).permit(:name, :groundtruth).tap do |whitelisted|
whitelisted[:groundtruth] = params[:measurement][:groundtruth]
end
end