web-dev-qa-db-ja.com

ActiveModelシリアライザーにパラメーターを渡す方法

active model serializer を使用しています。 has_manyアクティビティがあるモデルイベントがあります。

最初のn個のアクティビティでイベントを返します。 params nをイベントシリアライザーに渡す必要があると思います。

63
Bruce Xinda Lin

渡されたオプションは、@optionsハッシュを介して利用できます。あなたがそうするなら:

respond_with @event, activity_count: 5

シリアライザー内で@options[:activity_count]を使用できます。

42
Logan Serman

バージョン~> 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
93
Eric Norcross

@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
38
Jon Gold

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
11
wintondeshong

アクティブモデルシリアライザー0.10の時点で、 here のように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
9
jubeless

serialization_options Active Model Serialization 0.9.3でうまく機能します。

Renderコマンドと一緒に渡されたオプションは、シリアライザーでそれらのキーを使用してアクセスできます->serialization_options [:key]

8