복붙노트

[RUBY-ON-RAILS] ActiveModel 시리얼에 매개 변수를 전달하는 방법

RUBY-ON-RAILS

ActiveModel 시리얼에 매개 변수를 전달하는 방법

나는 활성 모델 시리얼을 사용하고 있습니다. 나는 어떤 has_many 활동 모델 이벤트가 있습니다.

나는 처음 n 활동과 이벤트를 반환합니다. 나는 이벤트 직렬로 n은 PARAMS을 통과한다고 생각합니다.

해결법

  1. ==============================

    1.전달 옵션은 @options 해시를 통해 사용할 수 있습니다. 그래서 만약 당신이 할 :

    전달 옵션은 @options 해시를 통해 사용할 수 있습니다. 그래서 만약 당신이 할 :

    respond_with @event, activity_count: 5
    

    [: activity_count] 시리얼 라이저 내에서 당신은 @options를 사용할 수 있습니다.

  2. ==============================

    2.버전 ~> 0.10.0에서는 @instance_options를 사용해야합니다. 위에서 @ 존 골드 예제를 사용 :

    버전 ~> 0.10.0에서는 @instance_options를 사용해야합니다. 위에서 @ 존 골드 예제를 사용 :

    # 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
    
  3. ==============================

    3.@options 해시는 0.9에서 제거; 동등한 방법처럼 보이는 최근에 추가 -

    @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
    
  4. ==============================

    4.당신과 같이 #serialization_options을 사용할 수 있습니다 0.9.3을 사용하여 ...

    당신과 같이 #serialization_options을 사용할 수 있습니다 0.9.3을 사용하여 ...

    # 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
    
  5. ==============================

    5.여기서 볼 수 있듯이 활성 모델 시리얼의 0.10로서 당신은 instance_options 변수를 통해 임의의 옵션을 전달할 수 있습니다.

    여기서 볼 수 있듯이 활성 모델 시리얼의 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
    
  6. ==============================

    6.serialization_options는 활성 모델 직렬화 0.9.3와 함께 잘 작동합니다.

    serialization_options는 활성 모델 직렬화 0.9.3와 함께 잘 작동합니다.

    명령을 렌더링과 함께 전달 된 옵션은 자신의 키를 사용하여 시리얼 라이저에 액세스 할 수 있습니다 -> serialization_options [: 키]

  7. ==============================

    7.단지 활동의 이벤트 시리얼 라이저 및 반환 n은 숫자에 활동 방법을 추가되어 간단한 방법. 즉이다.

    단지 활동의 이벤트 시리얼 라이저 및 반환 n은 숫자에 활동 방법을 추가되어 간단한 방법. 즉이다.

    class EventSerializer < ActiveModel::Serializer
    
      has_many :activities
    
      def activities
        object.activities[0..9] # Select whatever you want
      end
    end
    
  8. from https://stackoverflow.com/questions/23347587/how-to-pass-parameters-to-activemodel-serializer by cc-by-sa and MIT license