【问题标题】:Empty database, user already exists message?空数据库,用户已经存在消息?
【发布时间】:2016-01-18 19:17:17
【问题描述】:

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

见下文:

用户存在 (0.2ms) SELECT 1 AS one FROM "users" WHERE "users"."firstname" IS NULL LIMIT 1 (0.1ms) 回滚事务
在布局/应用程序中渲染 users/new.html.erb (2.4ms) 在 136 毫秒内完成 200 次 OK(查看次数:68.4 毫秒 | ActiveRecord:0.9 毫秒)

见下面的代码 - 干杯!

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 %>

【问题讨论】:

  • 更大的跟踪,或者至少有关您正在做什么的信息会很有用......
  • @Smar 我正在填写我网站上的注册表单。我输入名字、姓氏、电子邮件、密码和密码确认。当我单击“提交”时,我的表单被清除,并且控制台告诉我用户已经存在(即使它不存在)。我正在尝试创建一个新用户,并将其保存到我的数据库中。

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


【解决方案1】:

从生成的 SQL 中可以看出,firstname 在您的新用户上是 nil

那是因为这一行有错别字:

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

应该是:

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

【讨论】:

  • 哇,谢谢你看到这个!我修复了该行,但是在单击“注册”(提交我的表单)时,我抛出了这个错误:“UnknownAttributeError(用户的未知属性'password_confirmation')”:@user = User.new(user_params)
  • @Brittany 这是因为password_confirmation 不是User 的属性,通常这是通过has_secure_password 之类的东西来完成的,它会将其添加为用于验证目的的虚拟属性。请确保将has_secure_password 添加到User,然后重试。请注意,您可能还必须将 bcrypt 添加到您的 GemFile 才能正常工作。
【解决方案2】:

我认为您缺少一些参数。使用设计?尝试通过rails控制台新建一个用户,看看需要什么参数。

【讨论】:

    【解决方案3】:

    检查以first_namelast_name 给出的强参数,但形式上是firstnamelastname

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 1970-01-01
      • 2017-05-21
      • 1970-01-01
      • 2021-11-18
      • 2022-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多