Permit params trong Rails
Hôm nay mình xin chia sẻ về cách permit params trong Rails. Khi gửi data cho backend với dạng Content-Type: application/json Trường hợp 1: cái này đơn giản: { phone: "+84935999999" email: "[email protected]" } Ở controller chúng ta sẽ permit: def info_params ...
Hôm nay mình xin chia sẻ về cách permit params trong Rails.
Khi gửi data cho backend với dạng Content-Type: application/json
Trường hợp 1: cái này đơn giản:
{
phone: "+84935999999"
email: "[email protected]"
}
Ở controller chúng ta sẽ permit:
def info_params
params.permit(:phone, :email)
end
Trường hợp khác phức tạp hơn một tí, data của bạn là một array và nested khá nhiều:
{
"flights": [
{
"location": {
"from": {
"airport_name": "Danangairport",
"airport_code": "DAD",
"city_name": "Danang",
"country_name": "Vietnam"
},
"to": {
"airport_name": "Hochiminhcityairport",
"airport_code": "SGN",
"city_name": "Saigon",
"country_name": "Vietnam"
}
},
"time": {
"from": {
"date": "09-22-2015"
},
"to": {
"date": "09-25-2015"
}
}
}
],
"travelers": [
1,
2,
3
],
"flight_class": 0
}
Trong trường hợp này bạn muốn permit params: flights, travelers, flight_class theo cách có work không?
def info_params
params.permit(:flights, :travelers, :flight_class)
end
Tất nhiên là không rồi!!! Vì hiện tại data của chúng ta nested khá nhiều. Vậy đâu là cách giải quyết cho việc permit params array nested thế này:
def info_params
params.permit({ :flights => [ :location => [ :from => [ :airport_name, :airport_code, :city_name, :country_name ],
:to => [ :airport_name, :airport_code, :city_name, :country_name ] ],
:time => [ :from => [:date],
:to => [:date] ]
] },
{ :travelers => [] },
:flight_class)
end
Đơn giản phải không nào. Hi vọng là đã chia sẽ cho các bạn 1 tip mà các bạn có thể áp dụng được :) :v