【问题标题】:Pass locals from controller to active model serializer将本地变量从控制器传递到活动模型序列化器
【发布时间】:2016-06-17 13:09:58
【问题描述】:

我正在尝试将 locals(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

【问题讨论】:

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


    【解决方案1】:

    每当我需要将选项传递给序列化程序时,我都会执行以下操作:

    # 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 的某些元素。

    【讨论】:

    • 它导致undefined method []' for nil:NilClass` for @options[:prod]
    • 我正在使用这个版本的 gem。 gem 'active_model_serializers', '~&gt; 0.8.3'。也许从那以后选项发生了变化?
    猜你喜欢
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 2014-08-31
    • 2013-01-08
    • 1970-01-01
    相关资源
    最近更新 更多