将参数从Grape :: API传递给Serializer

时间:2016-08-16 14:32:14

标签: ruby-on-rails grape-api serializer

我得到一个参数,例如:Grape :: API中的member_id,如

   desc 'Return Events'
         params do
             requires :member_id, type: Integer, desc: 'Member'
         end
         get 'all' do
              #some code
         end
     end

我希望将其传递给ActiveModel::Serializer,以便我可以执行某些功能。

有什么办法可以将它传递给ActiveModel::Serializer吗?

1 个答案:

答案 0 :(得分:3)

使用ActiveModel::Serializers序列化对象时,您可以将序列化程序中可用的选项传递为options(或instance_optionscontext,{{3 }})。

例如,在Rails中,您可以传递foo选项,如下所示:

# 0.8.x or 0.10.x
render @my_model, foo: true
MyModelSerializer.new(@my_model, foo: true).as_json

# 0.9.x
render @my_model, context: { foo: true }
MyModelSerializer.new(@my_model, context: { foo: true }).as_json

在您的序列化程序中,您可以访问options(或instance_options)来获取值:

class MyModelSerializer < ActiveModel::Serializer
  attributes :my_attribute

  def my_attribute
    # 0.8.x: options
    # 0.9.x: context
    # 0.10.x: instance_options
    if options[:foo] == true
      "foo was set"
    end
  end
def