sql - 如何清理 Arel SQL?
问题描述
我有以下 Arel SQL:
Arel.sql("(users.last_donated_at IS NOT NULL AND users.last_donated_at < '#{User::ACTIVE_DONOR_WITHIN_DAYS.days.ago}')")
当我运行刹车时我会收到SQL Injection
警告。我尝试了以下方法:
Arel.sql("(users.last_donated_at IS NOT NULL AND users.last_donated_at < ?)", User::ACTIVE_DONOR_WITHIN_DAYS.days.ago)
但是,我收到以下错误:
ArgumentError:
wrong number of arguments (given 2, expected 1)
如何使用 Arel 清理 sql 语句?
解决方案
我正在回答我自己的问题。我在 Github wiki 之后使用 Arel 来获取 Ransack gem。我正在做与文档中提到的第 2.2 点非常相似的事情:https ://github.com/activerecord-hackery/ransack/wiki/Using-Ransackers 。为了清理参数并避免刹车sql injection
警告,我最终做了以下事情:
Arel.sql(sanitize_sql_array("(users.last_donated_at IS NOT NULL AND users.last_donated_at < '#{User::ACTIVE_DONOR_WITHIN_DAYS.days.ago}')"))
推荐阅读
- angular - Angular 5:在 ng build --prod 之后没有出现 css 并且无法转到其他页面
- javascript - 使用输入绑定更新类对象
- javascript - Webpack 尝试从子目录加载 build.js
- raspberry-pi3 - 连接到 GPIO 的 NC COM 开关
- java - 数字提升是否适用于 Java 中的常量?
- ios - 在 NSMutablearray 中添加新实例时出现奇怪的崩溃
- gps - 计算用户随时间的步行距离
- stm32 - STM32 + Lwip,MCU负载由于广播包
- c# - C# Visual Studio 2012:无可用源
- python - 获取所有记录,但在 SQLAlchemy 中归档了一些条件?