Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby on Rails-恢复电子邮件NoMethodError上的密码_Ruby On Rails_Ruby_Haml_Password Recovery - Fatal编程技术网

Ruby on rails Ruby on Rails-恢复电子邮件NoMethodError上的密码

Ruby 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!

我正在设置重置密码功能。提交后,将发送带有重置密码链接的电子邮件。我从零开始做这件事,如中所述。然而,当我提交我的电子邮件时,我得到了这个错误

密码重置控制器#创建中的Nomethoder错误 开发日志和上面说的是一样的^

app/models/user.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/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日期时间


您的数据库用户列password\u reset\u send\u at似乎应该是password\u reset\u send\u at。您可以通过进入迁移文件并进行简单更改,然后运行

$ 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