【问题标题】:Accessing current_user in AMS 0.10在 AMS 0.10 中访问 c​​urrent_user
【发布时间】:2015-07-22 10:17:00
【问题描述】:

我以这种方式在视图上下文中实例化 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

【问题讨论】:

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


    【解决方案1】:

    访问它的一种方法是将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
    

    这里有一些文档肯定比我更有帮助:

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      这可以通过实现 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-31
        • 1970-01-01
        • 1970-01-01
        • 2013-07-12
        相关资源
        最近更新 更多