我正在使用活动模型序列化器。我有一个模型活动,其中有很多活动。
我想返回前n个活动的事件。我认为我应该将参数n传递给事件序列化程序。
Answers:
传入的选项可通过@options
散列获得。因此,如果您这样做:
respond_with @event, activity_count: 5
您可以@options[:activity_count]
在序列化器中使用。
we recommend that any new projects you start use the latest 0.8.x version of this gem. This version is the most widely used, and will most closely resemble the forthcoming release.
@options
似乎不适用于我,事实证明哈希改为 @instance_options
。对我来说就做到了。
在版本中,~> 0.10.0
您需要使用@instance_options
。使用上面的@Jon Gold示例:
# controller
def action
render json: @model, option_name: value
end
# serializer
class ModelSerializer::ActiveModel::Serializer
def some_method
puts @instance_options[:option_name]
end
end
的@options
散列在除去0.9
; 看起来最近添加了等效方法-
def action
render json: @model, option_name: value
end
class ModelSerializer::ActiveModel::Serializer
def some_method
puts serialization_options[:option_name]
end
end
serialization_options
应该适用于0.9,但似乎使用0.8,@options
是目前唯一可行的方法。
使用0.9.3,您可以像这样使用#serialization_options ...
# app/serializers/paginated_form_serializer.rb
class PaginatedFormSerializer < ActiveModel::Serializer
attributes :rows, :total_count
def rows
object.map { |o| FormSerializer.new(o) }
end
def total_count
serialization_options[:total_count]
end
end
# app/controllers/api/forms_controller.rb
class Api::FormsController < Api::ApiController
def index
forms = Form.page(params[:page_index]).per(params[:page_size])
render json: forms, serializer: PaginatedFormSerializer, total_count: Form.count, status: :ok
end
end
作为0.10
的主动型串行器,你可以通过传递任意选择instance_options
所看到的变量在这里。
# posts_controller.rb
class PostsController < ApplicationController
def dashboard
render json: @post, user_id: 12
end
end
# post_serializer.rb
class PostSerializer < ActiveModel::Serializer
attributes :id, :title, :body
def comments_by_me
Comments.where(user_id: instance_options[:user_id], post_id: object.id)
end
end
serialization_options与Active Model Serialization 0.9.3兼容。
可以在序列化器中使用其键-> serialization_options [:key]访问与render命令一起传递的选项。
简单的方法是在事件序列化器中添加活动方法并返回n个活动。这就对了。
class EventSerializer < ActiveModel::Serializer
has_many :activities
def activities
object.activities[0..9] # Select whatever you want
end
end