Rel 4 - Kuat Parameter - Bersarang Benda
I've mendapat pertanyaan yang cukup sederhana. Tapi belum't menemukan solusi sejauh ini.
Jadi di sini's JSON string saya kirim ke server:
{
"name" : "abc",
"groundtruth" : {
"type" : "Point",
"coordinates" : [ 2.4, 6 ]
}
}
Menggunakan izin baru metode, aku've punya:
params.require(:measurement).permit(:name, :groundtruth)
Ini melempar tidak ada kesalahan, tapi database yang dibuat entri berisi null
bukan groundtruth nilai.
Jika saya hanya mengatur:
params.require(:measurement).permit!
Semuanya mendapatkan's diselamatkan seperti yang diharapkan, tapi tentu saja, ini membunuh keamanan yang disediakan oleh parameter kuat.
I've ditemukan solusi, bagaimana untuk mengizinkan array, tapi tidak satu contoh menggunakan bersarang benda-benda. Ini harus mungkin entah bagaimana, karena itu harus cukup umum use case. Jadi, bagaimana cara kerjanya?
134
4
Aneh seperti suara ketika anda ingin mengizinkan bersarang atribut yang anda lakukan menentukan atribut-atribut dari objek bersarang di dalam array. Dalam kasus anda itu akan
Update seperti yang disarankan oleh @RafaelOliveira
Di sisi lain jika anda ingin bersarang dari beberapa objek maka anda membungkusnya di dalam hash seperti ini...
Rel yang benar-benar memiliki cukup dokumentasi yang baik tentang hal ini: http://api.rubyonrails.org/classes/ActionController/Parameters.html#method-i-permit
Untuk penjelasan lebih lanjut, anda bisa melihat pelaksanaan
izin
danstrong_parameters
itu sendiri: https://github.com/rails/rails/blob/master/actionpack/lib/action_controller/metal/strong_parameters.rb#L246-L247Saya menemukan saran ini berguna dalam kasus saya:
Cek ini link dari Xavier's komentar di github.
Pendekatan ini whitelist seluruh params[:pengukuran][:groundtruth] objek.
Menggunakan pertanyaan asli atribut:
Memungkinkan sebuah objek bersarang :
Jika Rel 5, karena baru hash notasi:
params.izin(:nama, groundtruth: [:jenis, koordinat:[]])
akan bekerja dengan baik.