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