如何使模型方法中的属性集在控制器中可用? attr_accessor 不工作?

How to make attribute set in model method available in controller? attr_accessor not working?

我的会话控制器方法(对于 API)使用模型方法生成令牌。接下来它应该使用 json 将令牌发送到前端。但是,在 render json 行,api_token 不再可用,而是 nil。应该如何处理?

module Api
  module V1
    class ApiSessionsController < Api::BaseController
      def create
        user = User.friendly.find_by(email: create_params[:email].downcase)
        if user && user.authenticate(create_params[:password])
          user.create_api_token
          render json: { api_token: api_token }, status: :ok
        else
          render json: {errors: "wrong credentials" },  status: :unauthorized
        end
      end
   end 
  end 
end

class User < ActiveRecord::Base
    attr_accessor :api_token
    has_secure_password

    def create_api_token
      begin
        self.api_token = User.new_token
        api_digest = User.digest(api_token)
      end while self.class.exists?(api_digest: api_digest)
      update_attributes(api_digest: api_digest, api_sent_at: Time.zone.now)
    end

    def User.digest(string)
      cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : BCrypt::Engine.cost
      BCrypt::Password.create(string, cost: cost)
    end
end

我认为这条线应该是这样的

render json: { api_token: user.api_token }, status: :ok

您的控制器代码引用了未定义的 api_token 变量,因此您收到 nil