Ruby on rails 获取密码可以';如果您有安全密码,则不能为空

Ruby on rails 获取密码可以';如果您有安全密码,则不能为空,ruby-on-rails,Ruby On Rails,使用Rails 4.x中的has_secure_密码功能时,获取密码不能为空: 这是我的档案: Gemfile安装了捆绑包(&I): 宝石“bcrypt” 这是桌子 create_table :teachers do |t| t.string :firstname, null: false t.string :lastname, null: false t.string :email, null: false t.string :cellphone t.st

使用Rails 4.x中的has_secure_密码功能时,获取密码不能为空:

这是我的档案:

Gemfile安装了捆绑包(&I):

宝石“bcrypt”

这是桌子

   create_table :teachers do |t|

   t.string :firstname, null: false
   t.string :lastname, null: false
   t.string :email, null: false
   t.string :cellphone
   t.string :username, null: false
   t.string :password_digest, null: false
   t.string :addr_streetno
   t.integer :addr_aptno
   t.string :addr_city
   t.string :addr_state
   t.integer :addr_zip
   t.binary :photo, :limit => 0.5.megabyte

   t.timestamps
end 
这是模型文件:

 class Teacher < ActiveRecord::Base

    has_many :students

    has_secure_password
    attr_accessor :password, :password_confirmation
    validates_presence_of :password, :on => :create

    EMAIL_REGEX = /\A[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\z/i
    validates :username, :presence => true, :uniqueness => true, :length => { :in => 3..20 }
    validates :email, :presence => true, :uniqueness => true, :format => EMAIL_REGEX
end
班主任:create
电邮地址(REGEX=/\A[A-Z0-9.Z0%+-]+@[A-Z0-9.-]+\[A-Z]{2,4}\Z/i
验证:username,:presence=>true,:university=>true,:length=>{:in=>3..20}
验证:email,:presence=>true,:university=>true,:format=>email\u REGEX
结束
这是表单中密码字段的代码:

<tr>
   <th>Password</th>
   <td><%= f.password_field :password %></td>
 </tr>
 <tr>
   <th>Confirm Password</th>
   <td><%= f.password_field :password_confirmation %></td>
 </tr>
 <tr> 

密码
确认密码
这是控制器代码:

class TeacherController < ApplicationController
  def index
      @teachers= Teacher.all 
  end

  def new
      @teacher = Teacher.new
  end

  def create
      @teacher = Teacher.new(teacher_params)
      if @teacher.save
        redirect_to :action => 'index'
      else
        render :action => 'new'
      end
  end

  def edit
  end

  def show
  end

private

    def teacher_params
      params.require(:teacher).permit(:firstname, 
                                      :lastname, 
                                      :dob, 
                                      :email, 
                                      :cellphone, 
                                      :username, 
                                      :password,
                                      :password_confirmation,
                                      :addr_streetno, 
                                      :addr_aptno, 
                                      :addr_city, 
                                      :addr_state,
                                      :addr_zip, 
                                      :photo)
    end
end
class-TeacherController“index”
其他的
呈现:操作=>“新建”
结束
结束
定义编辑
结束
def秀
结束
私有的
def教师参数
参数require(:teacher).permit(:firstname,
:lastname,
:dob,
:电邮,
:手机,
:用户名,
:密码,
:密码\u确认,
:地址:街道号,
:addr_aptno,
:地址:,
:addr_state,
:addr_-zip,
:照片)
结束
结束

在型号中,您有这一行,它定义了密码的长度。将其更改为您的要求:

validates_length_of :password, :in => 6..20, :on => :create

在您的控制器中,允许使用加密的\u密码:

params.require(:teacher).permit(:encrypted_password)
但是,这是不允许的,因为用户不能更改
加密的\u密码的值。从列表中删除
加密密码
,并添加
密码
密码确认

params.require(:teacher).permit(:password, :password_confirmation)
我使用Rails 4和
has\u secure\u Password
收到“Password cannot blank”验证错误消息

我的模型是这样的:

class User < ActiveRecord::Base
  validates :email, presence: true, uniqueness: true
  has_secure_password
end
我想我会和大家分享,尽管这个问题很老了,因为它是搜索这个问题的最佳结果,而所有其他问答都没有提到这一点

attr_accessor :password, :password_confirmation

在教师课堂上评论这一行。

这会更容易使用,它也会做同样的事情。请分享您的控制器代码;是否定义了强参数,其中包括
:password
?错误是因为密码的值小于6个字符。请确保长度大于或等于6@Pavan你不能肯定。如果使用强参数且不允许使用密码,则会引发相同的错误。不,我将“欢迎”作为密码。它的7个字符。Crispy,我把welcome作为密码,所以应该在定义的限制内。所以我会在添加has\u secure\u密码后,在保存之前取出:,保存之后取出:,并从模型中加密和清除密码。这是问题的一部分。我还有什么其他问题。当我添加has_secure_密码并删除上述内容时,它在bcrypt上给了我一个错误。无法加载这样的文件--bcrypt。我验证了我已经安装了bcrypt 3.1.7 gem。很难在评论中解释如何使用
has\u secure\u password
。如果你在实施上有困难,我建议你提出一个新的问题。我已经通过了,这看起来很直观。所以我需要一个名为password_digest的属性。是否需要将其放入迁移文件中。是的,如果您已经使用了
加密密码
,则需要将其重命名为
密码摘要
。对于bcrypt问题,您可以尝试将行
gem'bcrypt'
更改为
gem'bcrypt',要求Gemfile中的'bcrypt'
。我也一样。我只需要在我的用户模型中移动
验证:email
高于
设计…
语句。
attr_accessor :password, :password_confirmation