从控制器调用模型中的方法
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
我想从我的控制器调用模型中的 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