ActiveRecord :: RecordInvalid验证失败:帐户必须存在

时间:2019-08-27 21:36:54

标签: ruby-on-rails ruby

使用ruby 2.6和rails 5.2 在Rails控制台中创建用户会增加

ActiveRecord::RecordInvalid (Validation failed: Account must exist)

我刚刚生成了Devise User,所以目前没有user_controller

模型

user.rb

class User < ApplicationRecord
   belongs_to :account
end

account.rb

class Account < ApplicationRecord
    has_many :users
end

控制器

accounts_controller.rb

class AccountsController < ApplicationContoller
     def new                     
       redirect_to root_path       
       unless current_user.account.nil?
       @account = Account.new       
    end
     def create                   
      @account = Account.new(account_params)          
      if @account.save            
      current_user.account = @account                     
      current_user.save
      redirect_to root_path, success: "Your account has been created!"               
  else                         
      render :new                  
    end                        
  end
........
end

2 个答案:

答案 0 :(得分:1)

对于 Rails 5 ,默认情况下需要belongs_to关联。因此,您应该将帐户设置为可选。

belongs_to :account, optional: true

答案 1 :(得分:0)

谢谢@demir的回答,我已经处理了3天了。 现在,我想分享我调试此问题的方法。 第1步: 在控制台中创建用户以了解问题:

@u=User.new("id"=>"2030","username"=>"kam corner","email"=> "corner@gmail.com","contact"=> "78542036","status"=> "1","password"=> "corneroftiassale","password_confirmation"=> "corneroftiassale")

=>#

注意:我将新用户保存在变量@u上,因为我想在保存后向用户显示

2:irb(main):004:0> @u.save!

importat:请参阅错误消息。 在我的用例上,我得到:

`用户存在(1.6ms)在“用户”中以“用户”形式选择1。“电子邮件” = $ 1 LIMIT $ 2 [[“电子邮件”,“ corner@gmail.com”],[“ LIMIT”, 1]] (0.4ms)回滚 追溯(最近一次通话): 1:来自(irb):8 ActiveRecord :: RecordInvalid(验证失败:级别必须存在)

` 步骤3:获取错误消息进行调试:

irb(main):009:0> @u.save.errors

查看错误 和@ u.errors.details => {:level => [{{:error =>:空白}]}

摘要: 尝试在控制台上创建新用户,使用SAVE!方法,当您遇到错误时, 尝试@ VARIABLE_USE__TO_CREATE_USER.errors.details。 再次感谢你@demir