71

我正在使用活动模型序列化程序。我有一个有很多活动的模型事件。

我想用前 n 个活动返回活动。我想我应该将参数 n 传递给事件序列化程序。

4

7 回答 7

112

在版本~> 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
于 2016-06-22T01:04:17.100 回答
50

传入的选项可通过@options哈希获得。所以如果你这样做:

respond_with @event, activity_count: 5

您可以@options[:activity_count]在序列化程序中使用。

于 2014-04-28T17:44:18.043 回答
45

@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
于 2014-11-06T13:17:44.060 回答
14

使用 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
于 2015-08-13T13:52:56.993 回答
10

活动模型序列化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
于 2018-05-22T19:15:31.977 回答
8

serialization_options与活动模型序列化 0.9.3 配合得很好。

与渲染命令一起传递的选项可以在序列化程序中使用它们的键访问 -> serialization_options[:key]

于 2015-02-25T11:00:38.540 回答
-3

简单的方法是在事件序列化程序中添加活动方法并返回 n 个活动。这就对了。

class EventSerializer < ActiveModel::Serializer

  has_many :activities

  def activities
    object.activities[0..9] # Select whatever you want
  end
end
于 2014-04-28T18:37:07.817 回答