ActiveRecord 保存对象失败后验证信息不显示

本文探讨了Rails应用中如何正确处理事务与错误信息。通过具体的Member和Baby模型示例,分析了使用save!方法时遇到的问题:事务逻辑虽正确执行,但错误信息丢失。文章进一步讨论了save和save!方法的区别及如何确保错误信息得以保留。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    写了这样两个模型 member 和baby

member代码

class Member < ActiveRecord::Base
  #模型关系设置
  has_one :baby
  
  #数据校验区
  validates_presence_of     :name,:email
end

 

baby代码

 

class Baby < ActiveRecord::Base
  #模型关系设置
  belongs_to :member
  
  #数据校验区
  validates_presence_of   :name,:nickname,:sex,:member
end

 

在member模型里有这样一段代码

 

#注册信息
  def self.enroll(member,baby)
    begin
      transaction(member,baby) do
        member.baby = baby
        member.save!
        baby.save!
      end
    rescue      
    end
  end

  

在控制器代码中接受用户提交的参数,但在调用enroll方法后,事务逻辑是正确的,在member和baby任一对象保存不成功,则重新返回注册页面提交数据,但为什么属性的错误信息没有了?如果使用save方法,不适应save!方法的话,错误信息还在,但事务逻辑不正确,没有异常出现了

 

save!方法会抛出异常,来通知事务出错,但save!方法不会将错误信息放到errors里面么?

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值