访问AMS 0.10中的current_user

时间:2015-07-22 10:17:01

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

我在视图上下文中实例化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

2 个答案:

答案 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

以下是一些肯定比我更好的文档:

希望这有帮助。

答案 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