2014-04-15 2 views
2

, 내 직렬화에 대한 URL PARAMS 전달해야합니다컨트롤러에서 시리얼 라이저로 params를 전달하려면 어떻게해야합니까? JSON API에 대한

http://mydomain.com/api/categories?name=news&counter=123

이 내 API 컨트롤러 :

내 시리얼 라이저는 다음과 같습니다
class Api::CategoriesController < ApplicationController 
    respond_to :json 
    def index 
    respond_with Category.where("name ==? AND content_counter >?", params[:name], params[:counter].to_i) 
    end 
end 

:

class CategorySerializer < ActiveModel::Serializer 
    attributes :id, :name, :content_counter 
    has_many :chapters 

    def chapters 
     object.chapters.active.with_counter(???) 
    end 
end 

제 챕터 모델에 범위가 있습니다 :

scope :with_counter, lambda { |counter| where("content_counter >?", counter.to_i) } 

(???) 에 카운터 값 123을 전달할 수 있습니까?

도움을 주시면 감사하겠습니다.

답변

4

당신은 @options를 사용하여 activemodel 시리얼 값을 전달할 수는 다음과 같이 객체 :

class Api::CategoriesController < ApplicationController 
    respond_to :json 
    def index 
    respond_with Category.where("name ==? AND content_counter >?", params[:name], params[:counter].to_i), 
       counter_value: params[:counter] 
    end 
end 

class CategorySerializer < ActiveModel::Serializer 
    attributes :id, :name, :content_counter 
    has_many :chapters 

    def chapters 
    object.chapters.active.with_counter(@options[:counter_value]) 
    end 
end