ProgramingTip

매개 변수를 ActiveModel Serializer에 전달하는 방법

bestdevel 2020. 11. 22. 20:22
반응형

매개 변수를 ActiveModel Serializer에 전달하는 방법


활성 모델 변환기를 사용 하고 있습니다 . has_many 활동이있는 모델 이벤트가 있습니다.

처음 n 개의 활동이있는 이벤트를 반환하고 싶습니다. 매개 변수 n을 이벤트 시리얼 라이저에 전달해야합니다.


전달 된 옵션은 @options해시를 통해 사용할 수 있습니다 . 따라서 다음과 같이하면됩니다.

respond_with @event, activity_count: 5

@options[:activity_count]serializer 내에서 사용할 수 있습니다 .


버전에서 ~> 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

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에서 잘 작동합니다.

render 명령과 함께 전달 된 옵션은 키-> serialization_options [: key]를 사용하여 serializer에서 액세스 할 수 있습니다 .


간단한 방법은 이벤트 직렬 변환기에 활동 메소드를 추가하고 n 개의 활동을 리턴하는 것입니다. 그게 다입니다.

class EventSerializer < ActiveModel::Serializer

  has_many :activities

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

참고 URL : https://stackoverflow.com/questions/23347587/how-to-pass-parameters-to-activemodel-serializer

반응형