Ruby on rails Ruby on Rails-恢复电子邮件NoMethodError上的密码
我正在设置重置密码功能。提交后,将发送带有重置密码链接的电子邮件。我从零开始做这件事,如中所述。然而,当我提交我的电子邮件时,我得到了这个错误 密码重置控制器#创建中的Nomethoder错误 开发日志和上面说的是一样的^ app/models/user.rbRuby on rails Ruby on Rails-恢复电子邮件NoMethodError上的密码,ruby-on-rails,ruby,haml,password-recovery,Ruby On Rails,Ruby,Haml,Password Recovery,我正在设置重置密码功能。提交后,将发送带有重置密码链接的电子邮件。我从零开始做这件事,如中所述。然而,当我提交我的电子邮件时,我得到了这个错误 密码重置控制器#创建中的Nomethoder错误 开发日志和上面说的是一样的^ app/models/user.rb def send_password_reset generate_token(:password_reset_token) self.password_reset_sent_at = Time.zone.now save!
def send_password_reset
generate_token(:password_reset_token)
self.password_reset_sent_at = Time.zone.now
save!
UserMailer.password_reset(self).deliver
end
def generate_token(column)
begin
self[column] = SecureRandom.urlsafe_base64
end while User.exists?(column => self[column])
end
class PasswordResetsController < ApplicationController
def new
end
def create
user = User.find_by_email(params[:email])
user.send_password_reset if user
redirect_to root_url, :notice => "Email sent with password reset instructions."
end
def edit
@user = User.find_by_password_reset_token!(params[:id])
end
def update
@user = User.find_by_password_reset_token!(params[:id])
if @user.password_reset_sent_at < 2.hours.ago
redirect_to new_password_reset_path, :alert => "Password reset has expired."
elsif @user.update_attributes(params[:user])
redirect_to root_url, :notice => "Password has been reset!"
else
render :edit
end
end
end
def current_user
@current_user ||= User.find_by_auth_token!(cookies[:auth_token]) if cookies[:auth_token]
app/controllers/password\u重置\u controller.rb
def send_password_reset
generate_token(:password_reset_token)
self.password_reset_sent_at = Time.zone.now
save!
UserMailer.password_reset(self).deliver
end
def generate_token(column)
begin
self[column] = SecureRandom.urlsafe_base64
end while User.exists?(column => self[column])
end
class PasswordResetsController < ApplicationController
def new
end
def create
user = User.find_by_email(params[:email])
user.send_password_reset if user
redirect_to root_url, :notice => "Email sent with password reset instructions."
end
def edit
@user = User.find_by_password_reset_token!(params[:id])
end
def update
@user = User.find_by_password_reset_token!(params[:id])
if @user.password_reset_sent_at < 2.hours.ago
redirect_to new_password_reset_path, :alert => "Password reset has expired."
elsif @user.update_attributes(params[:user])
redirect_to root_url, :notice => "Password has been reset!"
else
render :edit
end
end
end
def current_user
@current_user ||= User.find_by_auth_token!(cookies[:auth_token]) if cookies[:auth_token]
app/vies/password\u resets/new,html.haml
%h1 Reset Password
= form_tag password_resets_path, :method => :post do
.field
= label_tag :email
= text_field_tag :email, params[:email]
.actions
= submit_tag "Reset Password"
end
我已经做了rake:db:reset和rake:db:migrate和reset服务器
编辑:数据库用户
- id整数主键
- 电子邮件varchar(255)
- 密码\u hash varchar(255)
- 密码\u salt varchar(255)
- 在datetime创建
- 在datetime更新了\u
- 身份验证令牌varchar(255)
- 密码\重置\令牌varchar(255)
- 密码\u重置\u发送\u日期时间
$ rake db:reset
$ rake db:migrate
那么,您是否向您的用户模型中添加了一个密码\u reset\u send\u at列?显示数据库/架构中的表
users
的外观。rbahhh很好的呼叫我已将其设置为密码\u reset\u send\u at我应该将发送更改为sent,对吗?但是我该如何改变呢?我在edit中包含了users db来改变它,创建一个迁移,使用rename\u列:users,:password\u reset\u send\u at,:password\u reset\u send\u at
或者只编辑创建错误的迁移,rake db:reset&&rake db:migrate