ruby-on-rails - 如何让 ActiveRecord 在原始语句中绑定?
问题描述
所以我基本上是这样做的:
::OuterModel.where(%{
EXISTS(SELECT * FROM inner_model
WHERE outer_model.id = inner_model.outer_model_id)
AND inner_model.parameter = ?)
}, 1)
现在问题变成了它在 ActiveRecord 中进行文本替换,它不绑定?
到1
,这反过来又使 ActiveRecords 准备好的语句变得毫无意义,因为每个查询都有不同的1
.
我怎样才能对我的EXIST
陈述有约束力?
在做一些简单的事情时当然也是如此:
::OuterModel.where('state = ?', 'active')
这里的替代方法不是 do.join
或 generate IN
,其性能要差得多,或者在我的实际用例中不起作用。
解决方案
如果您确定这param
是安全的并且您没有从用户端收到它 - 那么您可以使用字符串插值#{1}
。如果不是 - 您可以使用插值来清理该值#{ActiveRecord::Base.connection.quote(1)}
推荐阅读
- 4d-database - 如何以编程方式拒绝 4d v17 上的新连接?
- c++ - C++低吞吐量winsock TCP测试应用
- javascript - 文本内容不会在反应中呈现
- symfony - Symfony - 找不到类型的 Twig 实体
- swift - swift4中hashable协议有什么用?
- swagger - 生成SDK需要正确生成swagger json
- php - 如何上传多个文件并移动到php中的文件夹?
- javascript - 同一个 Angular 2 项目中的两个不同的 url
- c++ - 使用-mavx编译时,c ++ 17 std::vector在元素SIGSEGV的对齐类型上的副本
- java - 在 PNB 移动 android 应用程序上进行自动化时,Java Appium 错误 500