如何将参数传递给ActiveModel序列化程序

时间:2014-04-28 17:34:46

标签: ruby-on-rails active-model-serializers

我正在使用active model serializer。我有一个有很多活动的模特活动。

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

7 个答案:

答案 0 :(得分:87)

在版本~> 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

答案 1 :(得分:40)

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

respond_with @event, activity_count: 5

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

答案 2 :(得分:38)

@options中删除了0.9哈希;看起来像一个等价的方法是recently added -

def action
  render json: @model, option_name: value
end

class ModelSerializer::ActiveModel::Serializer
  def some_method
    puts serialization_options[:option_name]
  end
end

答案 3 :(得分:11)

使用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

答案 4 :(得分:8)

serialization_options 适用于Active Model Serialization 0.9.3。

可以使用密钥在序列化程序中访问与render命令一起传递的选项 - &gt; serialization_options [:键]

答案 5 :(得分:7)

active model serializer0.10开始,您可以通过instance_options变量传递任意选项,如here所示。

# 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

答案 6 :(得分:-1)

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

class EventSerializer < ActiveModel::Serializer

  has_many :activities

  def activities
    object.activities[0..9] # Select whatever you want
  end
end