使用ruby 2.6和rails 5.2 在Rails控制台中创建用户会增加
ActiveRecord::RecordInvalid (Validation failed: Account must exist)
我刚刚生成了Devise User,所以目前没有user_controller
class User < ApplicationRecord
belongs_to :account
end
class Account < ApplicationRecord
has_many :users
end
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
答案 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