2015-01-15 48 views
0

我想從我的控制器調用模型中的generate_token方法,但我得到一個錯誤:undefined method generate_token。從控制器的模型調用方法

我控制器

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

這是我的模型users_controller

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

關於你的代碼

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

整個login_validate方法: 「而T3他是一個錯誤,未定義的方法generate_token「 這是因爲你正在用類名稱(User.generate_token)調用方法,但generate_token似乎是一個實例方法。 如果你想調用實例方法,你必須創建該類的一個對象。 但是,如果你想調用,類級別的方法,然後確保你的方法擁有自我。在開始時。

如果你想生成一個隨機令牌&返回給控制器那就試試這個:

#users_controller.rb 
    unique_token = User.genereate_token 

下面的方法是一個類級別的方法(因爲它使用自身),所以叫它像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 
+0

分享完整的錯誤日誌和控制器login_validate方法正文部分? – Ajay

+0

你是對的,我跑你的代碼,但它仍然有一個錯誤:undefine局部變量或方法'令牌' – wind

+0

你必須得到這個錯誤,因爲「User.exists?(:token => generated_token)」,我假設你的用戶模型擁有屬性(令牌),請分享你的用戶模型中擁有這個令牌屬性的哪個屬性,只需替換爲該名稱,你的問題將被修復。 – Ajay