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: "abc.123@gmail.com"
}

Ở 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

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

My Mai

33 bài viết.
164 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
21 8
Lotus là gì? (Link) là một Ruby Web Framework mới với chú trọng vào cấu trúc tách rời với thiết kế đơn giản và dễ hiểu. Hiện tại thì Lotus vừa re...
My Mai viết gần 3 năm trước
21 8
White
18 21
Bạn muốn load 3 image khác nhau (Ý mình ở đây là dùng tag không phải background nhé) cho 3 loại màn hình khác nhau (small, medium, large). Bạn sẽ l...
My Mai viết gần 3 năm trước
18 21
White
18 7
Tham gia cộng đồng Thoáng đó cũng đã 2 năm từ lúc tớ tham gia cộng đồng Ruby Việt Nam. Giờ ngồi ngẫm lại được gì và mất gì :v Thật thì chẳng mất...
My Mai viết hơn 1 năm trước
18 7
Bài viết liên quan
White
8 1
Tiếp theo (Link) Mình sẽ hướng dẫn cách test căn bản cho API mình tạo. Thật ra mà nói thì mình phải viết test trước khi làm nhưng mà để tránh việc...
My Mai viết hơn 2 năm trước
8 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
33 bài viết.
164 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!