原始 SQL 请求中的 Rails 4 字符串插值

2023-12-23

在不进行插值的情况下重写此查询的最佳方法是什么?

def case_joins(type)
  subquery = <<-SQL.squish
    SELECT id FROM cases c2
    WHERE c2.title_id = titles.id AND c2.value = 0 AND c2.type = '#{type}'
    ORDER BY c2.created_at DESC LIMIT 1       
  SQL
  "LEFT OUTER JOIN cases ON cases.title_id = titles.id AND cases.value = 0 AND cases.type = '#{type}' AND cases.id = (#{subquery})"
end

我假设您希望避免变量插值,这很危险,因为它对 SQL 注入开放。我只是简单地加入从子查询中选择的案例,而不是将子查询放入WHERE状况。这确实涉及插值,但仅限于 AR 生成的 SQL。我还将其实现为利用 AR 范围链的范围:

class Title < ActiveRecord::Base
  def self.case_joins(type)
    case_query = Case.from("cases c").where(c: {title_id: title_id, value: 0, type: type}).order('c.created_at DESC').limit(1)
    joins("LEFT OUTER JOIN (#{case_query.to_sql}) cases ON cases.title_id = titles.id")
  end
end

这样,您就可以将范围链接到其他范围,如下所示:

Title.where(attribute1: value1).case_joins("typeA")

(注意去掉了多余的WHERE外部条件SELECT.)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

原始 SQL 请求中的 Rails 4 字符串插值 的相关文章

  • 使用 PayPal REST API,如何取消付款?

    使用 PayPal REST API 在客户点击 取消订单并返回网站 链接后 我似乎无法弄清楚如何取消付款 也许在生产模式下 PayPal 会自动取消这些付款 但在沙盒模式下它们似乎仍处于 已创建 状态 这一观察结果使我相信 我需要在返回网
  • 无法使用 gem 添加源

    我正在尝试添加http rubygems org http rubygems org 在我的来源中 因为我无法使用 gem install NAME 此错误 无法在任何存储库中找到有效的 gem dashing gt 0 所以 我执行了这个
  • 如何将文本数据从 ruby​​ 控制台传递到剪贴板而不保存到文件?

    我试图将我创建的全局变量中包含的数组传递到我的 mac 上的剪贴板中 它很长 所以我不想在控制台上突出显示 复制和粘贴 我想使用嵌入式unix代码 特别是pbcopyMac 笔记本电脑控制台的功能 允许我将文本传递到我的计算机剪贴板中 准备
  • Rspec 通过 mTurk 测试实时结果

    我正在通过 Rspec 测试代码在 mTurk 上创建点击 但同时我需要测试必须从 mTurk 发回的结果 为了节省每次测试的复杂性 我使用 VCR 将 HTTP 请求记录在盒式磁带中 我该如何实施这个测试 好吧 我为此做了一些修改 我使用
  • PostgreSQL:用以前的值填充时间序列查询中的 NULL 值

    我有一个包含时间相关信息的数据库 我想要一个包含每分钟值的列表 像这样 12 00 00 3 12 01 00 4 12 02 00 5 12 03 00 5 12 04 00 5 12 05 00 3 但是 当几分钟内没有数据时 我得到如
  • 我可以在同一台 Apache 服务器上运行 Python Django 和 Ruby 吗?

    我正在使用 ModWSGI 在 Apache2 上运行 Python Django 并且我想在同一台服务器上运行 Ruby on Rails 可以这样做吗 我读到 Passenger for Ruby on Rails 也可以支持 Djan
  • 如何使 Postgres Copy 忽略大 txt 文件的第一行

    我有一个相当大的 txt 文件 9gb 我想将此 txt 文件加载到 postgres 中 第一行是标题 后面是所有数据 如果我直接 postgres COPY 数据 标头将导致数据类型与我的 postgres 表不匹配的错误 因此我需要以
  • 设计忽略我的自定义策略

    我想创建一个用于访问 API 的自定义身份验证策略 我按照示例代码进行操作设计忽略自定义策略 https stackoverflow com questions 3503827 devise ignoring custom strategy
  • 安装 RVM 时出现问题

    我已按照 rvm 网站上的说明执行了命令 但似乎不起作用 从 git 存储库获取代码运行顺利 但是当我尝试使用时 rvm notes Error usr local bin rvm line 73 home cody rvm scripts
  • 分割 Ruby 字符串时如何保留分隔符?

    我有这样的文字 content Do you like to code How I love to code I m always coding 我试图将其拆分为 or or content split 当我打印结果时 标点符号分隔符丢失
  • 在 Rspec 中测试 STDOUT 输出

    我正在尝试为这个声明建立一个规范 使用 看跌期权 很容易 print file doesn t exist Create Empty File y n RSpec 3 0 RSpec 3 0添加了一个新的output matcher htt
  • 是否可以下载 Ruby gem 而不自动安装它?

    当我使用下载东西时gem我希望能够只下载 gem 然后选择是否要安装它 我问这个问题是因为我想在多台计算机上安装特定的 gem 而不是在每台计算机上从互联网安装 宝石获取 所以 像 gem fetch gosu 这将离开gosu 0 7 1
  • git Push heroku master 因“HTTP 400curl 22 请求的 URL 返回错误”而失败

    我正在尝试推送仅显示 你好 世界 的 Rails 应用程序 然后我遇到了如下错误 我想知道如何解决这个问题 git推送heroku大师枚举对象 88 完成 计数对象 100 88 88 完成 增量压缩最多使用 4 个线程 压缩对象 100
  • 为什么机架响应主体是数组而不是字符串?

    他们的文档中的一个经典的 hello world 示例 class HelloWorld def call env return 200 Hello world end end 我的问题是为什么第三个值是 Hello world 而不是 H
  • Rails:与自身的多对多关系

    我在创建此关联时遇到问题 考虑模型 Entry 我希望条目有许多作为父母的条目 并且我希望条目有许多作为孩子的条目 我想通过一个我称为 关联 的模型来实现这种关系 所以这是我尝试的 移民 class CreateAssociations l
  • 如何避免在嵌套 Rails 表单上保存空记录

    我正在使用nested form宝石给我的AddressBook关系 当用户清空现有值时Addr 我想删除那个Addr而不是用空白保存value class Person lt ActiveRecord Base has many addr
  • 如何在 Heroku 上使用 rdiscount?

    我正在尝试将一个小型测试应用程序推送到 Heroku 这是应用程序和 Gem 文件 App require sinatra require haml require rdiscount set markdown layout engine
  • Capistrano + Thin + nginx 不允许用户使用 sudo howto?

    我有一个这样的场景 我想使用 capistrano 部署 ruby on Rails 应用程序 Web 应用程序位于瘦集群上 配置文件存储在 etc thin 下 etc init d thin 中还有一个初始化脚本 因此每当我的服务器需要
  • 使用 Squeal 时可以有条件地在 where 块中添加子句吗?

    首先 我使用 Rails v3 2 9 和 Squeel 1 0 13 这就是我想要做的 我想使用三项身份信息中的任何一项来搜索客户 姓名 出生日期 dob 和社会保险号码 sin 结果集必须包括具有任何标识符 条件的 OR 的任何记录 我
  • 使用 DataMapper 而不是 ActiveRecord [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐

  • 气流:无法连接到('0.0.0.0',8080)

    我使用的是 Ubuntu 16 04 我已经使用 pip 安装了 Airflow 下一步 airflow initdb 2017 07 29 12 20 23 483 init py 57 INFO Using executor Seque
  • 如何使用 XmlDocument 创建 XML 文档?

    如何创建这样的 XML 文档
  • leetcode中二叉树的类定义解释

    希望有人能帮助我了解这门课是如何运作的 我目前正在 udemy 中学习 JavaScript 算法 它们解释如何在二叉树中执行所有操作的方式与 leetcode 显示的稍有不同 课程中 树的定义与leetcode相同或非常相似 class
  • Lib Gdx json 序列化异常和缺少无参数构造函数

    当尝试执行这段代码时 public void load String filename FileHandle file Gdx files external filename bim Json json new Json String te
  • 在.net框架中测试

    我创建了一个针对 NET Framework 4 6 1 的单元测试项目 测试显示在测试资源管理器中 并在 Visual Studio 2017 中正常运行 我想设置一个构建过程 所以我想从命令行运行测试 我尝试使用 mstest 但这没有
  • 詹金斯正在重新启动,请稍候 - 等待很长时间

    我更新了一些插件并重新启动了詹金斯 但现在它说 Jenkins 正在重新启动 请稍候 当 Jenkins 准备就绪时 您的浏览器将自动重新加载 花费了太多时间 从最后 40 分钟开始等待 我只有 1 个项目 大约有 20 个版本 我已经重新
  • Tkinter - 使用自动换行计算文本小部件中的行数

    我想知道如何获取启用自动换行的 Tkinter Text 小部件中的行数 在此示例中 文本小部件中有 3 行 from Tkinter import root Tk text Text root width 12 height 5 wrap
  • 我从 .ssh 文件夹中删除了known_hosts 文件,并且无法在 BitBucket 存储库中拉取或推送

    我犯了一个错误 删除了 ssh 文件夹中的 known hosts 文件 现在我无法在 BitBucket 存储库中拉取或推送 我该如何解决 尝试执行 ssh T email protected cdn cgi l email protec
  • 从第二个 ViewController 返回到第一个 ViewController

    我正在构建一个当前有 3 个 ViewController 的应用程序 其中之一是在成功登录后使用的 因此与这个问题无关 当我发现 Storyboard 无法提供所需的精细控制时 我混合使用 Storyboard 并以编程方式构建内容 第一
  • 使用打字稿模板将 create-react-app 更新到 4.0 时出错

    我要更新react scripts到下一个版本 4 0 0 这样我就可以使用本指南使用快速刷新功能here https gist github com iansu 282dbe3d722bd7231fa3224c0f403fa1 但是当重新
  • 金字塔 postgresql 连接

    我对金字塔完全陌生 我正在尝试开发一个同时使用金字塔和 postgresql 的应用程序 但我对如何配置 sripts 目录中的initializedb py 文件 尤其是初始化数据库 完全感到困惑 我正在使用 PostgreSQL 9 1
  • 在android布局中layout_height =“0dip”的效果/含义是什么

    我见过几个使用的例子 android layout height 0px 或 0dip 但我不明白这样做的影响 看起来这会使布局高度为 0 像素 该值是否有所减轻 但还有一些其他因素 例如 重量 或任何父视图的高度 是的 你对重量的看法是正
  • Twig 将内容附加到块

    在树枝模板中 是否可以将内容附加到块中 例如 请考虑下面的模板文件 布局 html twig block content endblock content 内部 html twig block css a color fff body ba
  • 通过Python suds在JIRA中创建问题时设置受让人字段

    使用 JIRA 版本 4 2 使用 Python 2 7 和 suds 0 4 如何创建受让人字段集的问题 下面的代码中将忽略受让人字段 new issue client service createIssue auth project N
  • 使用Webpack将Vue暴露到全局

    我正在使用旧版 Rails 应用程序 该应用程序已部分迁移为使用 Webpacker 和 Vue 我们还有一个通过 CDN 加载的遗留脚本 该脚本也需要使用 Vue 但是 我们不想将 Vue 捆绑到其中 而只使用旧版 Rails 应用程序中
  • GNU Make 支持文件名中的“%”吗?

    在 GNU Make 中 是否可以依赖包含以下内容的文件 在文件名中 我有这样的事情 foo results 10 dat gnuplot config plt 虽然我当然可以选择不同的文件名 但很高兴知道是否 应该始终避免 或者是否有一种
  • Slurm:为什么在 sbatch 中使用 srun?

    在 sbatch 脚本中 您可以直接启动程序或脚本 例如可执行文件myapp 但在许多教程中人们使用srun myapp反而 尽管阅读了有关该主题的一些文档 我不明白其中的区别以及何时使用这些语法 我希望这个问题足够精确 SO的第一个问题
  • 如何从密钥库列出/导出私钥?

    如何列出并从密钥库导出私钥 您可以使用 Java6 和 OpenSSL 从密钥库中提取私钥 这一切都取决于 Java 和 OpenSSL 都支持 PKCS 12 格式的密钥库这一事实 要进行提取 您首先使用keytool转换为标准格式 确保
  • 用于编译 GUI 表单的 Ant 任务(Intellij IDEA)

    如何在 Intellij IDEA 中创建 Ant 任务来编译 GUI 表单 XML 我在项目中使用 Scala 和 Java Java仅用于GUI类 我使用Intellij IDEA UI Designer创建它 请不要打败我 但在设置
  • 原始 SQL 请求中的 Rails 4 字符串插值

    在不进行插值的情况下重写此查询的最佳方法是什么 def case joins type subquery lt lt SQL squish SELECT id FROM cases c2 WHERE c2 title id titles i