如何在 ActiveRecord 关系中转义 MySql 保留名称?

问题描述 投票:0回答:1

我正在使用较旧的 (rails 4) 代码库,我的任务是更新 mysql2 gem 以支持最新的数据库版本。使用我们当前版本的 gem 和代码,一切正常,但在升级时我遇到了与保留字“groups”的命名冲突。

除了一个查询之外,我已经设法在所有查询中使用反引号将其转义。我们调用

<modelname>.send(name, args)
,当
name
:groups
时,我们得到一个错误。发送返回一个活动记录关系。 relation.to_sql 告诉我它都被转义了,但一方面,最后的
groups
似乎被添加到 select * 的末尾,来自 selects 的联合:

SELECT `groups`.* 
  FROM 
( 
   (SELECT `groups`.* 
      FROM `groups` 
      WHERE ...) 
   UNION ALL 
   (SELECT `groups`.* 
      FROM `groups` 
      WHERE ...) 
) groups

我一直在试图找到一种方法来逃避最后一组参考。我能想到的唯一方法就是将其转换为 Arel sql 并以这种方式运行查询。 有没有我可以传递给 ActiveReccord 关系的某种“名称”,所以它给了我一个转义的

groups

非常感谢您的帮助!

ruby-on-rails ruby activerecord rails-activerecord arel
1个回答
0
投票

我寻求开箱即用的解决方案:

  • 重命名表格。如果你的是唯一的应用程序那么这将是理想的。
  • 查看表格并使用它。如果您有其他应用程序使用该表,那么这可能是可行的方法。对其进行视图并通过视图进行所有轨道访问。你得到你的蛋糕吃它。它只是增加了一点复杂性,您可以通过简单地重命名表来避免这种复杂性。
© www.soinside.com 2019 - 2024. All rights reserved.