从控制器调用模型中的方法

invoke method in Model from controller

我想从我的控制器调用模型中的 generate_token 方法,但我收到错误消息:未定义的方法 generate_token。

我的控制器

class UsersController < ActionController::Base
    def login_validate
      User.generate_token(:token)
      ....
    end
end

这是我的模型

class User < ActiveRecord::Base
    def generate_token(token)
       begin
          self[token] = "xxxxxxxxxxxxxxxxxxxx"
       end  while User.exists?(token => self[token])
    end
end

users_controller

中的整个login_validate方法
def login_validate
    @user = User.find_by_email params[:email]
    if @user.valid_password?(params[:password])
    cookies.permanent[:token] = @user.token
    render :json => @user
    end
end

关于您的代码: "but this is a error that undefined method generate_token" 那是因为您使用 class Name(User.generate_token) 调用方法,但 generate_token 似乎是一个实例方法。 如果你想调用实例方法,你必须创建一个 class 的对象。 但是如果你想调用 class 级别的方法,那么确保你的方法保持自我。在开头。

如果您尝试生成一个随机令牌并return它到控制器然后试试这个:

#users_controller.rb 
  unique_token = User.genereate_token 

下面的方法是一个class级别的方法(因为它使用了self),所以叫它User.generate_token

 # user.b
def self.generate_token 
  begin 
    generated_token = rand(1000..5000)
  end while User.exists?(:token => generated_token) 
  generated_token
end