Rails:has_one 的活动记录验证

问题描述 投票:0回答:1

我有2个型号

class A < ApplicationRecord
 has_one :b, dependent: :destroy
 has_one :c, dependent: :destroy
end

class B < ApplicationRecord
  belongs_to :a
  validates :ip_address, presence_true, format : {with: regex,message:"must be valid"}
end

保存/更新以上记录时,

transaction do
  save_b(params)
  save_c(params)
 rescue ActiveRecord::RecordNotSaved => e
   handle_error
 rescue ActiveRecord::RecordInvalid => e
   handle_error
end

save_b(params)
 self.b ||= build_b(params)
 b.update!(params)
end

如果在参数中发送了无效的

ip_address
,上面的代码会在
ActiveRecord::RecordNotSaved
块中进行救援。如何重构,以便在
ActiveRecord::RecordInvalid
中挽救错误,并在
ip_address
 中获得为 
model B

定义的错误消息
ruby-on-rails ruby activerecord
1个回答
0
投票
如果您使用

ActiveRecord::RecordInvalid

save!
 将会触发 
create!
然后您可以检查
b.errors
请参阅https://api.rubyonrails.org/classes/ActiveRecord/RecordInvalid.html 您可以做类似的事情,而不是引发异常

if a.save
  redirect_to a
else
  render json: {errors: a.errors}
© www.soinside.com 2019 - 2024. All rights reserved.