The Daily WTF 中文 关注 CodeSOD:当错误为真 Lillith 将新工具集成到一个具有"dry_run"功能的 Ruby on Rails API 中。该功能允许服务在不应用变更的情况下计算变更。问题出现的原因是,新工具以 JSON 格式发送了{"dry_run": false},但服务将其解释为 true。这种意外行为源于一个名为param_true?的辅助方法,该方法旨在处理字符串化或 nil 输入。该方法的逻辑,特别是!param_value,错误地将实际的布尔值false评估为true。此问题可能一直未被察觉,直到 POST/PATCH/PUT 请求开始发送包含布尔值的 JSON 主体。此前,GET 请求可能仅发送参数的字符串表示形式。该方法在获取值之后对params.key?(param_name)的冗余检查也被指出令人烦恼。核心问题在于该辅助方法对布尔值false的处理存在缺陷,导致"dry_run"标志被持续误识别。原始设计对参数类型的假设似乎是根本原因。 CodeSOD: When False is True thedailywtf.com The Daily WTF 中文 RSS thenote.app
param_true?的辅助方法,该方法旨在处理字符串化或 nil 输入。该方法的逻辑,特别是!param_value,错误地将实际的布尔值false评估为true。此问题可能一直未被察觉,直到 POST/PATCH/PUT 请求开始发送包含布尔值的 JSON 主体。此前,GET 请求可能仅发送参数的字符串表示形式。该方法在获取值之后对params.key?(param_name)的冗余检查也被指出令人烦恼。核心问题在于该辅助方法对布尔值false的处理存在缺陷,导致"dry_run"标志被持续误识别。原始设计对参数类型的假设似乎是根本原因。