我是RoR的新手,我正在尝试将新用户保存到数据库中,如下所示: 在users_controller中:
class UsersController < ApplicationController
def index
@users= User.all
end
def new
@user= User.new
end
def create
@user =User.new(user_params)
if @user.save
redirect_to root_path
flash[:notice]='you are a new user now!'
else
render 'new'
#flash[:notice]='oops!'
end
end
private
def user_params
params.require(:user).permit(:l_name, :f_name, :email, :pseudo, :password_digest, :password_confirmation)
end
end
我的用户模型:
class User < ActiveRecord::Base
has_secure_password
end
我的new.html.erb是这样的:
<h1>Inscription</h1>
<%= form_for (@user) do |f| %>
<div class="field">
<%= f.label :First_name %><br>
<%= f.text_field :f_name %>
</div>
<div class="field">
<%= f.label :Last_name %><br>
<%= f.text_field :l_name %>
</div>
<div class="field">
<%= f.label :pseudo %><br>
<%= f.text_field :pseudo %>
</div>
<div class="field">
<%= f.label :email %><br>
<%= f.text_field :email %>
</div>
<div class="field">
<%= f.label :password %><br>
<%= f.password_field :password_digest %>
</div>
<div class="field">
<%= f.label :password_confirmation %><br>
<%= f.password_field :password_confirmation %>
</div>
<%= f.submit %>
<% end %>
我只是把它放在路线文件中:root 'users#index'
resources :users
我选择了&#34; gem&#39; bcrypt-ruby&#39;,&#39;〜&gt; 3.1.2&#39;&#34;在gemfile中
没有显示任何错误,只是让我转到新页面
这是显示服务器的内容
开始GET&#34; / users / new&#34;对于2014.0-13 16:03:52 +0100的127.0.0.1 由UsersController处理#new为HTML [已弃用] I18n.enforce_available_locales将来默认为true。如果您确实想跳过语言环境的验证,可以设置I18n.enforce_available_locales = false以避免此消息。 在布局/应用程序中呈现users / new.html.erb(107.0ms) 在201ms完成200 OK(浏览次数:146.0ms | ActiveRecord:49.0ms) 开始POST&#34; / users&#34;对于2014.0-13 16:04:09 +0100的127.0.0.1 UsersController处理#create as HTML 参数:{&#34; utf8&#34; =&gt;&#34;✓&#34;,&#34; authenticity_token&#34; =&gt;&#34; SlNneso5r8eOLJ1fGcFI / aEr59jjPKcsrp0VgkXzupw =&#34;,&# 34;用户&#34; =&gt; {&#34; f_name&#34; =&gt;&#34; tdg&#34;,&#34; l_name&#34; =&gt;&#34; gdfghf&#34;, &#34; pseudo&#34; =&gt;&#34; tdrytr&#34;,&#34; email&#34; =&gt;&#34; teryte&#34;,&#34; password_digest&#34; =&gt; ;&#34; [过滤]&#34;,&#34; password_confirmation&#34; =&gt;&#34; [过滤]&#34;},&#34;提交&#34; =&gt;&# 34;创建用户&#34;} (1.0ms)BEGIN (0.0ms)ROLLBACK 在布局/应用程序中呈现users / new.html.erb(12.0ms) 在61ms完成200 OK(浏览次数:48.0ms | ActiveRecord:1.0ms)
答案 0 :(得分:1)
在这里尝试这样做: -
if @user.save
redirect_to root_path
flash[:notice] = 'you are a new user now!'
else
render 'new'
flash[:notice] = @user.errors
end
您将看到是否存在与您的用户对象相关的任何错误。我认为has_secure_password
的某些验证不正确答案 1 :(得分:0)
您的问题是,使用has_secure_password会自动添加密码验证,并且您可能尝试使用简单密码注册,从而无法在本地计算机上验证这些验证。
作为一种良好做法,如果您将用户留在创建新用户页面,请显示模型中的错误。
在“用户”视图中,如果您没有任何错误输出代码,请执行以下操作:
<% if @user.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>
<ul>
<% @user.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
另外,要调试,总是试着查看是否输出:
@user.save
是不是真的?
将来你可以这样做:
saved = @user.save
Rails.logger.info("Was the user saved? #{saved}")
if saved
# redirect
else
# etc
end