在数据库中保存数据失败了rails4

时间:2014-10-13 15:31:13

标签: ruby-on-rails

我是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)

2 个答案:

答案 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
相关问题