空数据库,用户已存在消息?

时间:2016-01-18 19:17:17

标签: ruby-on-rails ruby ruby-on-rails-4

我正在填写我网站上的注册表单。我输入名字,姓氏,电子邮件,密码和密码确认。当我点击“提交”时,我的表单清除,控制台告诉我用户已经存在(即使它没有,并向我发送成功消息)。 简而言之:我正在尝试创建一个新用户,并将其保存到我的数据库中。

见下文:

  

用户存在(0.2ms)SELECT 1 AS一个FROM“users”WHERE   “users”。“firstname”IS NULL LIMIT 1(0.1ms)回滚事务
  在布局/应用程序中呈现users / new.html.erb(2.4ms)   在136ms完成200 OK(浏览次数:68.4ms | ActiveRecord:0.9ms)

见下面的代码 - 干杯!

users_controller.rb

class UsersController < ApplicationController

def create
  @user = User.new(user_params)
  if @user.save
    flash[:success] = "You signed up successfully"
    flash[:color] = "valid"
    redirect_to @user
  else
    flash[:notice] = "Form is invalid"
    flash[:color] = "invalid"
    render "new"
  end
end


private
def user_params
  params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation)
end


def show
  @user = User.find(params[:id])
end

def new
end

end

user.rb

class User < ActiveRecord::Base


  validates_length_of :password, :in => 6..20, :on => :create
  validates :password_confirmation, presence: true, if: -> { new_record? || changes["password"] }

end

new.html.erb

<%= form_for(:user, :url => {:controller => 'users', :action => 'create'}) do |f| %>

<%= render 'shared/error_messages' %>

    </br> <%= f.text_field :firstname, placeholder: 'First Name' %> 
    </br> <%= f.text_field :lastname, placeholder: 'Last Name' %>
    </br> <%= f.text_field :email, placeholder: 'Email' %> 
    </br> <%= f.password_field :password, placeholder: 'Password' %>
    </br> <%= f.password_field :password_confirmation, placeholder: 'Confirm Password' %>
    <%= f.submit :Register %>
  <% end %>

3 个答案:

答案 0 :(得分:3)

从生成的SQL中可以看出,新用户firstnamenil

这是因为这一行包含拼写错误:

params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation

应该是:

params.require(:user).permit(:firstname, :lastname, :email, :password, :password_confirmation

答案 1 :(得分:0)

我认为你错过了一些参数。使用设计?尝试通过rails控制台创建一个新用户,以查看所需的参数。

答案 2 :(得分:0)

检查以[{1}}和first_name提供的强参数,但形式为last_namefirstname