当前位置: 首页 > 知识库问答 >
问题:

在Rails 4.2.6中升级设备时,未定义方法“reset_password_sent_at”

方安怡
2023-03-14

我将Rails版本从3.2升级到4.2.6,并设计了从1.4.9到4.2.0的版本。当我使用创建更新密码运行我的应用程序时,一切都很好。但是当我将旧的生产数据库转储上传到新数据库并尝试重置密码时,我面临以下错误:

无方法错误(未定义的方法“reset_password_sent_at=”

db/migrate/xxxxxxxx _ device _ create _ users . Rb:

class DeviseCreateUsers < ActiveRecord::Migration
  def self.up
    create_table(:users) do |t|
      t.string :email,              :null => false, :default => ""
      t.string :encrypted_password, :null => false, :default => ""

      ## Recoverable
      t.string   :reset_password_token
      t.datetime :reset_password_sent_at

      ## Rememberable
      t.datetime :remember_created_at

      ## Trackable
      t.integer  :sign_in_count, :default => 0
      t.datetime :current_sign_in_at
      t.datetime :last_sign_in_at
      t.string   :current_sign_in_ip
      t.string   :last_sign_in_ip

      ## Encryptable
      # t.string :password_salt

      ## Confirmable
      t.string   :confirmation_token
      # t.datetime :confirmed_at
      # t.datetime :confirmation_sent_at
      # t.string   :unconfirmed_email # Only if using reconfirmable

      ## Lockable
      # t.integer  :failed_attempts, :default => 0 # Only if lock strategy is :failed_attempts
      # t.string   :unlock_token # Only if unlock strategy is :email or :both
      # t.datetime :locked_at

      # Token authenticatable
      # t.string :authentication_token

      ## Invitable
      # t.string :invitation_token

      t.timestamps
    end
    add_index :users, :email,                :unique => true
    add_index :users, :confirmation_token,   :unique => true
    add_index :users, :reset_password_token, :unique => true
  end

  def self.down
    drop_table :users
  end
end

旧迁移文件:

class DeviseCreateUsers < ActiveRecord::Migration
  def self.up
    create_table(:users) do |t|
      t.database_authenticatable :null => false
      t.confirmable
      t.recoverable
      t.rememberable
      t.trackable
      # t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both

      t.timestamps
    end

    add_index :users, :email,                :unique => true
    add_index :users, :confirmation_token,   :unique => true
    add_index :users, :reset_password_token, :unique => true
    # add_index :users, :unlock_token,         :unique => true
  end

  def self.down
    drop_table :users
  end
end

请帮助我如何解决问题。

共有2个答案

楚举
2023-03-14

@Edmund Lee的观点是正确的,1.5和最新版本之间存在差异。由于在您的旧版本中找不到reset_password_sent_at,它会抛出错误。为此,您无需更改设计方,只需尝试添加:

ALTER TABLE users ADD reset_password_sent_at datetime;

到你的脚本文件并运行(简单的技巧),当你添加/编辑用户时也不会有问题。

司徒宏远
2023-03-14

这是在版本 1.5 左右添加的新列。

请点击此链接查看promise。https://github . com/plataformatec/device/commit/7693173 ECD 7 F9 b 4198 fafabafa 3a BD ced 7 fab 16d 3

因为您来自旧版本,所以您的数据库没有新的列可用。您可以运行迁移,这个特殊的问题应该会得到解决。但是可能会有更多的突破性变化,因为你要跳过三个主要版本。

德维斯在文档方面做得很好。在更新版本之前,请检查重大更改。https://github.com/plataformatec/devise/releases

仅供参考:

我个人建议在大更新的时候不要跳版本(比如1.x到2.x),更何况你是从1.x跳到4.x。

在语义版本控制中,

  • 最后一个数字通常只是补丁。如果您正在从最后一位数字升级(如1.4.2到1.4.5)
  • 第二位数字是次要更改,这可能会引入一些不赞成和一些破坏性更改,具体取决于他们如何管理版本。
  • 第一个数字总是一个重大的更新,涉及更大的变化,你应该非常小心

关于语义版本的更多信息。

http://semver.org/

 类似资料:
  • 问题内容: 启动有问题。 我初始化了我的Firebase应用程序。但是auth()无法正常工作 返回未定义。 它还给出了功能错误 错误: TypeError:auth.createUserWithEmailAndPassword不是函数 问题是什么? 问题答案: Firebase3.0.5中没有用于node.js的方法createUserWithEmailAndPassword,请参阅文档

  • 在2019年7月(版本2.20190722)中,添加了更编纂的字段API。 它旨在尽可能地向后兼容。 这意味着,如果您在2019年7月之前创建了自定义字段,则很有可能会继续工作。 在决定是否需要升级自定义字段之前,应通读“危险区域”部分,并对您的字段进行全面测试。 由于在2019年7月之前字段之间缺乏标准化,因此很难涵盖开发人员可能需要进行的所有更改。 本文档尝试涵盖所有可能的更改,但是如果本文档

  • 我正在尝试将添加到 Devise,但是当我注册一个新用户时,当我推送提交时它会中断。 我已确保运行< code>rake db:migrate并重新启动了我的服务器,但我得到了以下错误: ActiveRecord::StatementInvalid in Devise::RegistrationsController#create NoMethodError: nil:NilClass 的未定义方

  • 升级到最新的角度CLI后。我有以前没有的错误。其中之一是:referenceerror:未定义firebase 它指的是我的用户服务中的这一行: 如何解决这个问题?

  • 我试图从React调用一个API,但它一直以未定义的方式返回。这是我的代码: 当我运行它时,console.log()返回未定义的,这意味着我得到的错误。我不太确定如何解决这个问题,所以任何帮助都将不胜感激!谢谢。 编辑:这是API在您转到以下链接时返回的内容:

  • 我尝试了拉雷维尔的入门指南。通用域名格式。 有一章创建了任务。回调和函数