将本地从控制器传递到活动模型序列化程序

时间:2016-06-17 13:09:58

标签: ruby-on-rails-4 active-model-serializers

我正在尝试将本地人(prod:@ product.id)传递给我的控制器中的AMS,如下所示:

@options_json = ActiveModel::SerializableResource.new(@option_types, prod: @product.id)
@options_json = @options_json.to_json(serialization_context: ActiveModelSerializers::SerializationContext.new(request), serialization_options: {prod: @product.id})

我不确定是在初始化期间还是在调用to_json期间传递它。此外,我无法在OptionTypeSerializer中阅读此传递的参数。我已尝试使用options[:prod]serialization_options[:prod]serialization_opts[:prod]以及我在stackoverflow上找到的一些不同的解决方案,但都没有效果。 我的AMS指向master,我的gemfile.lock AMS版本为active_model_serializers (0.10.0.rc5)

还尝试使用:

@options_json = ActiveModel::SerializableResource.new(@option_types, serialization_context: ActiveModelSerializers::SerializationContext.new(request), prod: @product.id).to_json

但是将instance_options[:prod]的值设为null,尽管它不为null

1 个答案:

答案 0 :(得分:0)

每当我需要将选项传递给序列化程序时,我都会这样做:

# Controller
class CatalogPagesController < ApplicationController

  # GET /catalog_pages/event/:id
  def event
    @catalog_pages = @event.catalog_pages
    render json: @catalog_pages, index: true, each_serializer: Adm::CatalogPageSerializer
  end
end

# Serializer
class CatalogPageSerializer < Adm::FormSerializer
  attributes :id, :body, :catalog_page_templates

  def include_catalog_page_templates?
    return true unless @options[:index].present?
  end
end

在这个例子中,我希望在从索引路由来源时有条件地不返回JSON的某些元素。