我在has_secure_password
模型中使用了行User
。它看起来像这样:
class User < ActiveRecord::Base
before_create :create_remember_token
validates :name, presence: true, length: {minimum: 3, maximum: 22},
uniqueness: true
#validates :password, presence: true, length: {minimum: 6, maximum: 22}
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+\.[a-z]+\z/i
validates :email, :allow_blank => true, format: { with: VALID_EMAIL_REGEX }
has_secure_password
validates :password, length: {minimum: 6}
在我的User
新视图中,我有这个:
<h1>Sign up</h1>
<div class="row">
<div class="col-md-6 col-md-offset-3">
<%= form_for(@user) do |f| %>
<%= f.label :name, 'Username' %>
<%= f.text_field :name %>
<%= f.label :email, 'Email (Optional)' %>
<%= f.text_field :email %>
<%= f.label :password %>
<%= f.password_field :password %>
<%= f.label :password_confirmation, "Confirmation" %>
<%= f.password_field :password_confirmation %>
<%= f.submit "Create my account", class: "btn btn-large btn-primary" %>
<% end %>
</div>
</div>
根据我的阅读,has_secure_password
位应该“自动”创建并验证密码确认内容。但是,当我创建具有不匹配password
和password_confirmation
的用户时,它不会抛出任何内容。
我出错的任何想法?
EDIT: forgot this params.require(:user).permit(:name, :email, :password,
line right here-----> :password_confirmation)
答案 0 :(得分:1)
根据您的问题,我不确定是否创建的用户没有匹配密码及其确认,或者是否仅显示错误消息。所以我会尝试回答这两个问题。
表单不会抛出有关错误的信息,因为您没有要查看的错误代码。在表单的开头添加这段代码,以在表单中显示flash错误。
<%= form_for @user do |f| %>
<% if @user.errors.any? %>
<div class="error_messages">
<h2>Form is invalid</h2>
<ul>
<% for message in @user.errors.full_messages %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
....
其他可能是错误的是:
has_secure_password
validates :password, length: {minimum: 6}
您验证密码的最小长度,但不验证密码的存在。尝试更改第二行: 验证:密码,存在:真,长度:{最小值:6}
如果不起作用,请确保访问模型(rails 3)或controller(rails 4)中的password和password_confirmation字段:
如果您使用rails 3,则应在模型中添加代码,以便访问您在表单中不允许的所有参数:
app/models/user.rb
attr_accessible :name, :email, :password, :password_confirmation
如果你使用rails 4,它应该是这样的:
app/controllers/users_controller.rb
def user_params
params.require(:user).permit(:name, :email, :password, :password_confirmation)
end
希望它会有所帮助。