Rails - 表单未通过验证

时间:2014-03-25 13:35:54

标签: ruby-on-rails ruby-on-rails-4

我有以下验证规则:

class Employee < ActiveRecord::Base

  validates :name, presence: true, length: { maximum: 50 }

  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i

  validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: false }

  has_secure_password
  validates :password, length: { minimum: 6 }

  before_save { self.email = email.downcase }

end

这是debug(params)

--- !ruby/hash:ActionController::Parameters
utf8: ✓
authenticity_token: rqWNFu2/jeoZfTTZD5N6M080UcazPZR2hl0ON92sxnA=
employee: !ruby/hash:ActionController::Parameters
  name: xxx
  email: yyyy@zzzz.com
  password: '123456'
  password_confirmation: '123456'
commit: Create Employee
action: create
controller: employees

但验证仍然没有说:

Email can't be blank
Email is invalid
Password can't be blank
Password is too short (minimum is 6 characters)

编辑:控制器代码

  def create
    @employee = Employee.new(employee_params)

    respond_to do |format|
      if @employee.save
        format.html { redirect_to @employee, notice: 'Employee was successfully created.' }
        format.json { render action: 'show', status: :created, location: @employee }
      else
        format.html { render action: 'new' }
        format.json { render json: @employee.errors, status: :unprocessable_entity }
      end
    end
  end

任何人都可以向我解释我做错了什么? params似乎很好并且填写正确但我仍然无法通过验证

2 个答案:

答案 0 :(得分:1)

使用Rails4 Strong Parameters 概念,您必须 permit 您希望insert(create action)/update(update action)数据库中的参数,否则他们不会通过。

email方法中允许passwordemployee_params

employee_params应如下所示:

  def employee_params
    params.require(:employee).permit(:email, :password, :password_confirmation, :name)
  end

答案 1 :(得分:1)

问题是由Strong Parameters的错误使用引起的。以下列方式声明employee_params应该解决它:

private
def employee_params
  params.require(:employee).permit(:name, :email, :password, :password_confirmation)
end