ruby-on-rails 如何在ActiveRecord关系中转义MySql保留名称?

pu3pd22g  于 2023-05-19  发布在  Ruby
关注(0)|答案(1)|浏览(87)

我正在使用一个较旧的(rails 4)代码库,我的任务是更新mysql 2gem以支持最新的db版本。使用我们当前版本的gem和代码,一切正常,但是升级时我遇到了与保留字“groups”的命名冲突。
除了一个查询外,我已经设法在所有查询中使用反引号来逃避它。我们调用<modelname>.send(name, args),当name:groups时,我们得到一个错误。发送返回活动记录关系。relation.to_sql向我展示了它都被转义了,但有一件事,最后的groups似乎被附加到了一个select * 的末尾,来自一个select的并集:

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

我一直在试图找到一种方法来逃避最后一组引用。我能想到的唯一方法就是将其转换为Arel sql并以这种方式运行查询。是否有某种类型的“名称”可以传递给ActiveRecord关系,以便它给我一个转义的groups
非常感谢你的帮助!

zmeyuzjn

zmeyuzjn1#

我选择开箱即用的解决方案:

  • 重命名表。如果你的是唯一的应用程序,那么这将是理想的。
  • 创建表的视图并使用它。如果您有其他应用程序使用该表,那么这可能是一条路要走。创建一个视图,并通过该视图访问所有轨道。你可以鱼与熊掌兼得。它只是增加了一点复杂性,您可以通过简单地重命名表来避免。

相关问题