基于条件销毁Liabilities表记录失败,求原因分析
问题原因及修正方案
核心问题点
变量名冲突+判断逻辑错误
你写的person = person.find_by_id(5)存在两个问题:一是模型名应该大写(Person),和小写变量名person重名会导致逻辑混乱;二是find_by_id(5)返回的是Person对象,不是数字5,所以if person == 5的条件永远不成立,page.destroy根本不会执行。查询条件缺失+集合处理错误
Liability.where(page: 'show')只筛选了page为'show'的记录,没有加上person_id: 5的关联条件,就算执行销毁操作,也会删掉所有page='show'的记录,不是你要的目标记录。另外,where返回的是记录集合,需要用destroy_all才能批量销毁,单条记录销毁要用destroy。
正确代码示例
直接定位目标记录并销毁:
# 找到符合条件的单条记录,存在则销毁,不存在不报错 Liability.find_by(person_id: 5, page: 'show')&.destroy # 或者分步处理(适合需要额外判断的场景) target_liability = Liability.find_by(person_id: 5, page: 'show') target_liability.destroy if target_liability
内容的提问来源于stack exchange,提问作者Solitary Coder
相关产品推荐
相关产品推荐

