我在视图上下文中实例化AMS
s = BusinessSerialize.new(object, scope: self)
ActiveModel::Serializer.adapter.new(s)
我应该如何访问ActiveModel::Serializers
v0.10.0中的current_user?我一直在undefined local variable or method `current_user'
获得它的唯一方法 - scope.current_user
答案 0 :(得分:0)
访问它的一种方法是将serialization_scope
设置为view_context
。您可以在application_controller
中执行此操作,然后在需要更改时在其他控制器中对其进行自定义。
class ApplicationController < ActionController::Base
serialization_scope :view_context
end
然后在序列化器中:
class PostSerializer < ActiveModel::Serializer
attributes :id, :body, :can_edit
def can_edit
true if scope.current_user.can_edit?(object)
end
end
以下是一些肯定比我更好的文档:
https://github.com/rails-api/active_model_serializers/tree/0-9-stable#customizing-scope
https://github.com/rails-api/active_model_serializers/issues/624
希望这有帮助。
答案 1 :(得分:0)
通过实现Thread,只需几个步骤即可轻松完成。
步骤1:
class User < ApplicationRecord
def self.current
Thread.current[:user]
end
def self.current=(user)
Thread.current[:user] = user
end
end
第2步:
class ApplicationController < ActionController::Base
before_filter :set_current_user
def set_current_user
User.current = current_user
end
end
现在,您可以轻松地在模型和序列化器中将当前用户作为User.current