从控制器调用Model中的方法

时间:2015-01-15 06:04:04

标签: ruby-on-rails token

我想从我的Controller中调用Model中的generate_token方法,但是我得到一个错误:undefined method 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

1 个答案:

答案 0 :(得分:1)

关于你的代码: &#34;但这是一个错误,未定义的方法generate_token&#34;  那是因为您使用类名称(User.generate_token)调用方法,但generate_token似乎是一个实例方法。 如果要调用实例方法,则必须创建该类的对象。 但是如果你想调用,那么类级方法会确保你的方法保持自我。在开头。

如果您尝试生成随机令牌&amp;将其返回给控制器,然后尝试:

#users_controller.rb 
  unique_token = User.genereate_token 

以下方法是类级方法(因为它使用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