如何将条件属性与 jsonapi-serializers 一起使用
How to use conditional attributes with jsonapi-serializers
我正在使用 ruby-2.5.0 和 Rails 进行 Rails 项目的 Ruby 5. 我正在处理 api 部分,我在我的应用程序中使用了 jsonapi-serializers gem。我想在序列化器中添加条件属性。
控制器:
class RolesController < ApplicationController
def index
roles = Role.where(application_id: @app_id)
render json: JSONAPI::Serializer.serialize(roles, is_collection: true)
end
end
序列化器:
class RoleSerializer
include JSONAPI::Serializer
TYPE = 'role'
attribute :id
attribute :name
attribute :application_id
attribute :application do
JSONAPI::Serializer.serialize(object.application)
end
end
这里的application是has_many角色和角色属于application的模型。我想在某些情况下添加应用程序详细信息。我也试过:
控制器:
class RolesController < ApplicationController
def index
roles = Role.where(application_id: @app_id)
render json: JSONAPI::Serializer.serialize(roles, is_collection: true, params: params)
end
end
序列化器:
class RoleSerializer
include JSONAPI::Serializer
TYPE = 'role'
attribute :id
attribute :name
attribute :application_id
attribute :application do
JSONAPI::Serializer.serialize(object.application), if: @instance_options[:application] == true
end
end
但是@instance_options 是零。请帮助我如何解决它。提前致谢。
在 jsonapi-serializers 中,这是关于自定义属性的内容:
'The block is evaluated within the serializer instance, so it has access to the object and context instance variables.'
因此,在您的控制器中您应该使用:
render json: JSONAPI::Serializer.serialize(roles, is_collection: true, context: { application: true })
并且在你的序列化器中你应该使用 context[:application]
而不是 @instance_options
我正在使用 ruby-2.5.0 和 Rails 进行 Rails 项目的 Ruby 5. 我正在处理 api 部分,我在我的应用程序中使用了 jsonapi-serializers gem。我想在序列化器中添加条件属性。
控制器:
class RolesController < ApplicationController
def index
roles = Role.where(application_id: @app_id)
render json: JSONAPI::Serializer.serialize(roles, is_collection: true)
end
end
序列化器:
class RoleSerializer
include JSONAPI::Serializer
TYPE = 'role'
attribute :id
attribute :name
attribute :application_id
attribute :application do
JSONAPI::Serializer.serialize(object.application)
end
end
这里的application是has_many角色和角色属于application的模型。我想在某些情况下添加应用程序详细信息。我也试过:
控制器:
class RolesController < ApplicationController
def index
roles = Role.where(application_id: @app_id)
render json: JSONAPI::Serializer.serialize(roles, is_collection: true, params: params)
end
end
序列化器:
class RoleSerializer
include JSONAPI::Serializer
TYPE = 'role'
attribute :id
attribute :name
attribute :application_id
attribute :application do
JSONAPI::Serializer.serialize(object.application), if: @instance_options[:application] == true
end
end
但是@instance_options 是零。请帮助我如何解决它。提前致谢。
在 jsonapi-serializers 中,这是关于自定义属性的内容: 'The block is evaluated within the serializer instance, so it has access to the object and context instance variables.'
因此,在您的控制器中您应该使用:
render json: JSONAPI::Serializer.serialize(roles, is_collection: true, context: { application: true })
并且在你的序列化器中你应该使用 context[:application]
而不是 @instance_options