3

对于 JSON API,我需要将 url 参数传递给我的序列化:

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

1 回答 1

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
于 2014-04-17T02:59:11.423 回答