Как использовать Active Model Serializer для переопределения #as_json в контроллерах - PullRequest
0 голосов
/ 23 сентября 2019

Я хочу, чтобы пользователь ActiveModelSerializer мог выбрать, какие атрибуты и связанные объекты будут включены при сериализации объекта с #as_json.Я создал ActiveModelSerializer, который я могу явно вызвать в консоли:

class CompanySerializer < ActiveModel::Serializer
  attributes :id
end
Running via Spring preloader in process 16700
Loading development environment (Rails 5.2.3)
irb(main):001:0> Company.first.as_json
  Company Load (0.3ms)  SELECT  "companies".* FROM "companies" ORDER BY "companies"."id" ASC LIMIT $1  [["LIMIT", 1]]
=> {"id"=>1, "name"=>"Jerde Inc-1", "created_at"=>Mon, 09 Sep 2019 14:37:16 UTC +00:00, "updated_at"=>Mon, 09 Sep 2019 14:37:16 UTC +00:00}
irb(main):002:0> CompanySerializer.new(Company.first).as_json
  Company Load (0.4ms)  SELECT  "companies".* FROM "companies" ORDER BY "companies"."id" ASC LIMIT $1  [["LIMIT", 1]]
=> {:id=>1}

Сериализатор корректно включает только атрибут: id.Я хотел бы, чтобы это было поведение по умолчанию, когда мой контроллер сериализует json:

 1 class CompaniesController < ApplicationController
 2   before_action :require_authentication!
 3
 4   def show
 5     membership = Membership.find_by_user_id_and_company_id(current_user.id, params[:company_id])
 6     if membership
 7       return render(json: { data: { company: membership.company }, errors: nil }, status: 200)
 8     else
       ...
15   end
16 end

Я также попытался включить ActrionController :: Serialization в мой ApplicationController:

  1 class ApplicationController < ActionController::API
  2   include ::ActionController::Serialization
...

Но ответ jsonпродолжает сериализацию нежелательных атрибутов, таких как: updated_at,: made_at и т.д ...

...