我需要从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
但就我而言,我使用
ArraySerializer
在render
命令外部生成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 的响应中使用它:context
或scope
传递,几乎相同:# 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/