Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 当我尝试在数据库中创建新用户时,为什么rails会意外回滚?_Ruby On Rails - Fatal编程技术网

Ruby on rails 当我尝试在数据库中创建新用户时,为什么rails会意外回滚?

Ruby on rails 当我尝试在数据库中创建新用户时,为什么rails会意外回滚?,ruby-on-rails,Ruby On Rails,我正在尝试完成注册部分,但每次我尝试在站点注册时,服务器都会显示数据库已回滚的信息。我在db文件中找不到新用户 Started POST "/users" for 127.0.0.1 at 2014-03-12 17:09:50 +0800 Processing by UsersController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"CkaL2ZiNW8FWXRjPawShiNhQGmP+E

我正在尝试完成注册部分,但每次我尝试在站点注册时,服务器都会显示数据库已回滚的信息。我在db文件中找不到新用户

Started POST "/users" for 127.0.0.1 at 2014-03-12 17:09:50 +0800
Processing by UsersController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"CkaL2ZiNW8FWXRjPawShiNhQGmP+EHDMgSBbSyihE5E=",         "user"=>{"name"=>"foo1", "email"=>"foo@foobar.org", "password"=>"[FILTERED]",   "password_confirmation"=>"[FILTERED]"}, "commit"=>"Create my account"}
(0.1ms)  begin transaction
User Exists (0.2ms)  SELECT 1 AS one FROM "users" WHERE "users"."email" IS NULL LIMIT 1
(0.1ms)  rollback transaction
Rendered users/new.html.erb within layouts/application (5.2ms)
Completed 200 OK in 24ms (Views: 13.2ms | ActiveRecord: 0.5ms)
用户\u controller.rb:

class UsersController < ApplicationController
  def new
    @user = User.new 
  end

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

  def create
    @user=User.new(params[:id])
    if @user.save
     #balabala
    else
     render 'new'
    end
  end
end

谢谢。

在创建操作中,替换:

User.new(params[:id])
与:

获取传递到活动记录模型的数据


至于失败的原因:

  • 我猜你的电子邮件上有唯一性验证
  • 您没有发送电子邮件(因为参数错误)
  • 数据库中可能已经有一封空电子邮件
  • 验证失败

有趣的事实:这是一个很好的例子,让数据库确保您有预期的数据(真的允许使用空电子邮件吗?

您应该显示对您的用户的任何验证(或描述您用于用户管理的第三方gem),并说明是否显示了任何
@user.errors
。听起来很像验证失败了。它抛出了以下错误:
ActiveModel::ForbiddenAttributesError(ActiveModel::ForbiddenAttributesError):app/controllers/users\u controller.rb:14:in'create'
这是因为您使用的是强参数。我已经编辑了我的答案,很有效!谢谢不允许使用空电子邮件
VALID\u EMAIL\u REGEX=/\A[\w+\-.]+@[A-z\d\-.]+\.[A-z]+\z/i验证:电子邮件,状态:true,格式:{with:VALID\u EMAIL\u REGEX}
resources :static_pages 
resources :users
root to: 'static_pages#home'
match '/help',    to: 'static_pages#help',    via: 'get'
match '/signup',  to: 'users#new', via:'get'
User.new(params[:id])
User.new params.require(:user).permit(:name, :email, :password, :password_confirmation)