Rails 7.0.4中查询id字段时参数被转为NULL的问题求助
Rails 7.0.4 按ID查询时参数转为NULL的解决方案
可能的原因与排查步骤:
检查模型的id方法重定义
全局搜索项目代码,看是否在ApplicationRecord或具体模型中自定义了id方法,比如:def id nil end这种自定义会覆盖Active Record默认的id属性,导致查询时传入的id被替换为nil。删除这类自定义方法即可恢复正常。
排查全局查询拦截逻辑
检查是否存在default_scope或第三方gem(如权限、审计类gem)修改了查询条件。比如错误的全局默认作用域:default_scope -> { where(id: nil) }临时注释掉这类作用域或禁用可疑gem,测试查询是否恢复正常。
验证数据库适配器兼容性
检查pg或mysql2等数据库适配器的版本是否与Rails7.0.4兼容。执行以下命令更新适配器:bundle update pg # 针对MySQL:bundle update mysql2同时检查
config/database.yml中的配置,尝试临时切换prepared_statements的开关状态测试。检查全局参数处理逻辑
查看application_controller.rb中的全局before_action或参数过滤代码,是否误将:id参数清空或过滤。另外确认strong_parameters的全局配置没有意外限制id参数的传递。最小项目对比测试
新建一个空白的Rails7.0.4项目,创建测试模型后执行Model.find(123),如果查询正常,说明问题出在当前项目的代码或依赖中。可以逐步迁移代码/依赖到新项目,定位具体触发点。
验证示例:
如果排查到ApplicationRecord中存在自定义id方法,删除后重新执行查询:
# 修复前错误代码 class ApplicationRecord < ActiveRecord::Base def id nil end end # 修复后执行 User.find(123) # 生成正确SQL:SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 123]]
内容的提问来源于stack exchange,提问作者Edward J
相关产品推荐
相关产品推荐

