我正在使用 active model serializer。我有一个事件模型,其中有许多活动。
我希望返回包含前n个活动的事件。我认为应该将参数n传递给事件序列化程序。
我希望返回包含前n个活动的事件。我认为应该将参数n传递给事件序列化程序。
在版本~> 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
哈希表可用传递的选项。如果您执行:
respond_with @event, activity_count: 5
您可以在序列化程序中使用@options[:activity_count]
。@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
是唯一可行的办法。 - jmosesman从active model serializer的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
0.10
是 Rails 的版本吗? - duhaime使用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
serialization_options 与Active Model Serialization 0.9.3兼容。
使用render命令传递的选项可以通过其键在序列化器中访问 -> serialization_options [:key]
简单的方法就是在事件序列化器中添加activities方法并返回n个活动。就这样。
class EventSerializer < ActiveModel::Serializer
has_many :activities
def activities
object.activities[0..9] # Select whatever you want
end
end
@options
似乎没有起作用,结果发现哈希改为@instance_options
。这对我有用。 - the_critic