【问题标题】:saving data in database fails rails4在数据库中保存数据失败 rails4
【发布时间】:2014-12-08 05:33:59
【问题描述】:

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

我在 gemfile 中添加了“gem 'bcrypt-ruby', '~> 3.1.2'”

没有显示错误,只是将我带到新页面

这是显示服务器的内容

于 2014-10-13 16:03:52 +0100 开始为 127.0.0.1 获取“/users/new” 由 UsersController#new 处理为 HTML [已弃用] I18n.enforce_available_locales 将来将默认为 true。如果您真的想跳过对您的语言环境的验证,您可以设置 I18n.enforce_available_locales = false 以避免出现此消息。 在布局/应用程序中渲染 users/new.html.erb (107.0ms) 在 201 毫秒内完成 200 次 OK(查看次数:146.0 毫秒 | ActiveRecord:49.0 毫秒) 2014-10-13 16:04:09 +0100 开始为 127.0.0.1 发布 POST "/users" 由 UsersController#create 作为 HTML 处理 参数:{"utf8"=>"✓", "authenticity_token"=>"SlNneso5r8eOLJ1fGcFI/aEr59jjPKcsrp0VgkXzupw=", "user"=>{"f_name"=>"tdg", "l_name"=>"gdfghf", "pseudo "=>"tdrytr", "email"=>"teryte", "password_digest"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"创建用户"} (1.0ms) 开始 (0.0ms) 回滚 在布局/应用程序中渲染 users/new.html.erb (12.0ms) 在 61 毫秒内完成 200 次 OK(查看次数:48.0 毫秒 | ActiveRecord:1.0 毫秒)

【问题讨论】:

    标签: ruby-on-rails


    【解决方案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 的某些验证不正确

    【讨论】:

    • 感谢回复我,但这并没有解决问题,没有显示错误
    【解决方案2】:

    您的问题是密码验证是通过使用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-11
      • 2020-01-30
      相关资源
      最近更新 更多