Rails NoMethodError: undefined method `password_digest=



我是rails的新手,并且已经看到了我的问题的所有可能答案,因为其他开发人员经常问这个问题,但我无法解决它。请看一看。

尝试从控制台添加数据时收到此错误

User.create(name: "Michael Hartl", email: "mhartl@example.com", phone: "0123456789", password: "foobar", password_confirmation: "foobar")

显示错误

undefined method `password_digest=' for #<User:0x0000000375c788>
Did you mean?  password=

控制器

 def create
    @candidate = User.new(user_params)
    if @candidate.save
      flash[:notice] = "New Candidate Added Successfully"
      redirect_to(users_path)
    else
      render('new')
    end
  end
  private
    def user_params
      #Whitelisting for strng parameters
      params.require(:user).permit(:name, :email, :password, :password_confirmation, :qualification, :college, :stream, :phone)
    end

迁移:

class CreateUsers < ActiveRecord::Migration[5.1]
  def change
    create_table :users do |t|
      t.string :name, null: false
      t.boolean :admin_user, default: false
      t.string :email, null: false
      t.string :password_digest, null: false
      t.string :qualification
      t.string :college
      t.string :stream
      t.string :phone
      t.timestamps
    end
  end
end

require 'bcrypt'
class User < ApplicationRecord
    include BCrypt
    has_many :results, dependent: :destroy
    has_many :exams, through: :results
    accepts_nested_attributes_for :results
    VALID_EMAIL_REGEX = /A[w+-.]+@[a-zd-.]+.[a-z]+z/i
    before_save { self.email = email.downcase }
    has_secure_password
    validates :email, presence: true
    validates :email, presence: true, length: { maximum: 255 },format: { with: VALID_EMAIL_REGEX },uniqueness: { case_sensitive: false }
    validates :password, presence: true, length: { minimum: 6 }
    validates_confirmation_of :password
    validates_presence_of :password_confirmation
    validates :name, presence: true
    validates :phone, numericality: {only_integer: true}, length: {is: 10 , message: "length should be 10"} 
    scope :visible, lambda { where(:visible => true) }
    scope :invisible, lambda { where(:visible => false) }
    scope :sorted, lambda { order("id ASC") }
    scope :newest_first, lambda { order("created_at DESC") }
    scope :search, lambda {|query| where(["name LIKE ?", "%#{query}%"]) }

end

你检查过这个 https://github.com/plataformatec/devise/issues/1845

根据问题中所述,您正在使用ActiveModel的has_secure_password与Devise。您不得将两者混为一谈。

可能会从用户模型中删除has_secure_password将解决您的问题。

代码完全没问题,

很少有服务器重新启动并且不知道如何重新启动,但重新启动我的代码编辑器(Visual Studio Code(对我有用。

我将问题保持原样,因为我在经历了几个堆栈溢出线程后确实到达了这段代码。

注意:对于像我这样的新手,请参阅如何在从控制台插入数据库时检查错误,这很有帮助。同义示例如下:

导轨 C

user = User.new ( ... . . . . .. )
user.save
user.errors

谢谢

这也

发生在我身上,我发现有时vscode实际上并没有杀死正在运行的进程。您需要从终端终止导轨。使用 ps aux | grep rails 找出正在运行的进程,并使用 kill -9 [rails-pid] 停止进程。在您下次尝试时,一切应该一切正常。这个答案帮助了我。

相关内容

最新更新