在活动模型序列化程序生成的 JSON 中获取 kaminari 分页链接
Get kaminari pagination links in the JSON generated by the active model serializer
我正在尝试使用 AdminSerializer
将 @admins 转换为 JSON
#app/serializers/admin_serializer.rb
class AdminSerializer < ActiveModel::Serializer
attributes :id, :email, :access_locked?
end
管理员在哪里>> @admins = @search.result(:distinct => true).page(params[:page][:number]).per(10)
和 @search = Admin.search(params[:q])
当我执行此命令时 >> ActiveModel::SerializableResource.new(@admins.to_a).as_json
我确实得到了所需的 JSON,但是收到的 JSON 中缺少分页链接,因为它们在转换时丢失了@admins
使用 to_a
排列。
但是,当我执行 render :json => @admins
时,我得到了完整的 JSON 以及其中的分页链接,如下面的屏幕截图所示:
在latest commit可用中你需要使用:
resource = ActiveModel::SerializableResource.new(@admins)
resource.to_json(serialization_context: ActiveModelSerializers::SerializationContext.new(request))
我用的是 kaminari,它的分页很棒 gem
我无法在 json 响应中添加分页
但我找到了自定义代码。
#your controller#index
require 'pagination'
...your code
render json: Pagination.build_json(@posts, @comment_page, @comment_per)
# /lib/pagination.rb
class Pagination
def self.build_json object, nested_page = 1, nested_per = 10
ob_name = object.name.downcase.pluralize
json = Hash.new
json[ob_name] = ActiveModelSerializers::SerializableResource.new(object.to_a, nested_page: nested_page, nested_per: nested_per)
json[:pagination] = {
current_page: object.current_page,
next_page: object.next_page,
prev_page: object.prev_page,
total_pages: object.total_pages,
total_count: object.total_count
}
return json
end
end
我正在尝试使用 AdminSerializer
将 @admins 转换为 JSON#app/serializers/admin_serializer.rb
class AdminSerializer < ActiveModel::Serializer
attributes :id, :email, :access_locked?
end
管理员在哪里>> @admins = @search.result(:distinct => true).page(params[:page][:number]).per(10)
和 @search = Admin.search(params[:q])
当我执行此命令时 >> ActiveModel::SerializableResource.new(@admins.to_a).as_json
我确实得到了所需的 JSON,但是收到的 JSON 中缺少分页链接,因为它们在转换时丢失了@admins
使用 to_a
排列。
但是,当我执行 render :json => @admins
时,我得到了完整的 JSON 以及其中的分页链接,如下面的屏幕截图所示:
在latest commit可用中你需要使用:
resource = ActiveModel::SerializableResource.new(@admins)
resource.to_json(serialization_context: ActiveModelSerializers::SerializationContext.new(request))
我用的是 kaminari,它的分页很棒 gem 我无法在 json 响应中添加分页 但我找到了自定义代码。
#your controller#index
require 'pagination'
...your code
render json: Pagination.build_json(@posts, @comment_page, @comment_per)
# /lib/pagination.rb
class Pagination
def self.build_json object, nested_page = 1, nested_per = 10
ob_name = object.name.downcase.pluralize
json = Hash.new
json[ob_name] = ActiveModelSerializers::SerializableResource.new(object.to_a, nested_page: nested_page, nested_per: nested_per)
json[:pagination] = {
current_page: object.current_page,
next_page: object.next_page,
prev_page: object.prev_page,
total_pages: object.total_pages,
total_count: object.total_count
}
return json
end
end