我有以下验证规则:
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似乎很好并且填写正确但我仍然无法通过验证
答案 0 :(得分:1)
使用Rails4 Strong Parameters
概念,您必须 permit
您希望insert(create action)/update(update action)
数据库中的参数,否则他们不会通过。
在email
方法中允许password
和employee_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