Я хочу, чтобы пользователь 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 и т.д ...