ruby-on-rails-4 - 如何将参数传递给ActiveModel::ArraySerializer?

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

我需要从ItemSerializer中访问current_user_id
有办法实现吗?我什至有一个肮脏的hack :)

我知道serialization_options哈希的存在(来自How to pass parameters to ActiveModel serializer
),但仅适用于render命令(如果我正确的话),因此可以执行以下操作:

def action
  render json: @model, option_name: value
end

class ModelSerializer::ActiveModel::Serializer
  def some_method
    puts serialization_options[:option_name]
  end
end

但就我而言,我使用ArraySerializerrender命令外部生成json哈希,如下所示:
positions_results = {}    
positions_results[swimlane_id][column_id] =
  ActiveModel::ArraySerializer.new(@account.items,
                                   each_serializer: ItemSerializer,
                                   current_user_id: current_user.id) # <---- Does not work

最佳答案

您可以通过2种方式来做到这一点:

  • 将它们传递给serialization_options,但是据我所知,正如您所说,您只能在 Controller 的响应中使用它:
  • 如您所述,将它们通过contextscope传递,几乎相同:
    # same as with scope 
    ActiveModel::ArraySerializer.new(@account.items, each_serializer: ItemSerializer, context: {current_user_id: 31337})
    
    # In serializer:
    class ItemSerializer < ActiveModel::Serializer
        attributes :scope, :user_id
    
        def user_id
          context[:current_user_id]
        end
    end
    
  • 关于ruby-on-rails-4 - 如何将参数传递给ActiveModel::ArraySerializer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32439568/

    相关文章:

    javascript - 如何在 *.js.erb 文件上运行 eslint?

    mysql - Rails 查询数组中的 'comma separated string'

    ruby-on-rails - 使用事件模型序列化程序为充当可标记标签的标签加载 JSON 时出错

    ruby-on-rails - Rails + Ember.js + Devise 自由记者应用程序 - 数据范围界定

    ruby-on-rails - ActiveModel 序列化程序 : How do I serialize a resource collection?

    javascript - 单击 Rails 时显示原始照片

    html - Rails 4 - 导出整个 html 页面以供下载

    ruby-on-rails - jbuilder 与 rails-api/active_model_serializers 在 Rails 4 中处理 JSON

    mysql - rails 中的关联不起作用

    ruby-on-rails - Rails - 事件模型序列化序列化程序中的哈希数组