Hướng dẫn sử dụng gem active_model_serializers trong việc quy định dữ liệu trả về trong json
Trong hệ thông client và server, chúng ta đã khá quen thuộc về cấu trúc dữ liệu json. Và khi 1 request của client gửi tới server lấy thông tin, có nhưng thông tin ta muốn giấu thì phải làm thế nào? Gem active_model_serializers sẽ giúp chúng ta làm điều đó Đầu tiên hãy thử với ví dụ sau: ...
Trong hệ thông client và server, chúng ta đã khá quen thuộc về cấu trúc dữ liệu json. Và khi 1 request của client gửi tới server lấy thông tin, có nhưng thông tin ta muốn giấu thì phải làm thế nào?
Gem active_model_serializers sẽ giúp chúng ta làm điều đó
Đầu tiên hãy thử với ví dụ sau:
render json: {message: "", data: {user: @user}, code: 1}, status: 200
Đoạn code trên sẽ trả về toàn bộ thông tin của user, và thông tin và chúng ta hãy xem thông tin của user:
{ "message": "", "data": { "user": { "status": "actived", "id": 10, "authentication_token": "HxKuyKEsjN2pjm6FsVzh", "name": "Nguyen Van B", "email": "nguye.van.b@framgia.com", "address": null, "current_location": "Handico Tower, Phạm Hùng, Mễ Trì Hạ, Mễ Trì, Từ Liêm, Hà Nội, Vietnam", "latitude": 21.0166519, "longitude": 105.7818388, "phone_number": "+841234567891", "plate_number": null, "role": "shop", "rate": 1.5, "pin": null, "signed_in": true, "created_at": "2016-08-25T11:02:20.000Z", "updated_at": "2016-08-27T14:25:44.000Z" } }, "code": 1 }
Có rất nhiều thông tin không cần thiết cũng như cần bảo mật.
Và bây giờ chúng ta sẽ lọc những thông tin cần trả về
B1: Thêm gem 'active_model_serializers' và bundle B2: rails g serializer user ( Ở đây là với user, chúng ta có thể làm với các đối tượng tùy ý khác ) B3: Trong mục app/serializers/user_serializers.rb class UserSerializer < ActiveModel::Serializer attributes :id, :name, :email, :address, :phone_number end Ở phần attributes thêm những trường dữ liệu cần trả về Ngoài ra có thể chèn thêm dữ liệu không phải là trường của user Ví dụ: class UserSerializer < ActiveModel::Serializer attributes :id, :name, :email, :address, :phone_number, :users def users User.all end end B4: Thiết lập trả về @user = ActiveModelSerializers::SerializableResource.new(@user, option={}) render json: {message: "", data: {user: @user.as_json}, code: 1}, status: 200
Kết quả trả về sẽ là :
{ "message": "", "data": { "user": { "id": 10, "name": "Nguyen Van B", "email": "nguye.van.b@framgia.com", "address": null, "phone_number": "+841234567891", } }, "code": 1 }
Như vậy chúng ta đã loại bỏ được các trường dữ liệu cần thiết rồi
Cảm ơn các bạn đã quan tâm theo dõi