我有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
定义的错误消息
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}