【问题标题】:How to force Rails ActiveRecord to use CamelCase in queries, instead of snake_case如何强制 Rails ActiveRecord 在查询中使用 CamelCase,而不是 snake_case
【发布时间】:2020-08-09 17:19:22
【问题描述】:

我正在尝试创建一个 Rails 应用程序,该应用程序将连接到由 3rd 方软件使用的生产 SQLServer,因此迁移数据库不是一种选择。

我能够毫无问题地连接到 SQL 服务器(I used this guide for connecting to existing databasethis one to connect rails to SQL Server),并且我可以查询使用 snake_case 名称的表。

我需要访问的表格在 CameCase 中,我无法重命名它,因为第 3 方软件将停止工作。

我已经实现了/config/environment.rb

ActiveRecord::Base.pluralize_table_names = false 删除复数。

例如:

UserTable.count

ActiveRecord 创建这个:*SELECT COUNT(*) FROM [user_table]*

我希望 ActiveRecord 创建这个:SELECT COUNT(*) FROM [UserTable]

我应该修改哪个文件来指定它应该使用的正确表名?

【问题讨论】:

  • 你可以在 UserTable 模型类中查看 self.table_name = 'UserTable' 而不必担心 pluralize_table_names 设置;然后使用alias_attribute处理列名。

标签: sql ruby-on-rails activerecord camelcasing snakecasing


【解决方案1】:

我认为 Rails 在基础级别没有根据您的规范提供任何支持。 Rails 相信约定优于配置。

虽然我们可以覆盖模型中的表名。

user_table.rb

class UserTable < ApplicationRecord

  self.table_name = "UserTable"
  self.primary_key = "YourPrimaryKey"

end

【讨论】:

  • 后续问题,如果我在控制台中执行此操作> UserTable.first 我得到这个: UserTable Load (9.4ms) EXEC sp_executesql N'SELECT [UserTable].* FROM [UserTable] OFFSET 0 ROWS FETCH NEXT @0 ROWS ONLY', N'@0 int', @0 = 1 [["LIMIT", nil]] ActiveRecord::StatementInvalid: TinyTds::Error: '0' 附近的语法不正确。: EXEC sp_executesql N'SELECT [UserTable].* FROM [UserTable] OFFSET 0 ROWS FETCH NEXT @0 ROWS ONLY', N'@0 int', @0 = 1 from (irb):10 有什么想法吗?
  • @User9123 请问您使用的是哪个数据库软件
  • @User9123 我已经在 postgresql 中复制了您的用例,并且运行良好。我相信它也适用于 MySQL。如果您正在使用除此之外的任何数据库。请使用您的型号代码编辑您的问题。
  • 我使用的是 SQL Server 2012,我已经在此处发布了更多信息 github.com/rails-sqlserver/activerecord-sqlserver-adapter/…
  • 愿意补偿你的帮助拉维。给我发电子邮件:aet08 hotmail
猜你喜欢
  • 2011-08-23
  • 1970-01-01
  • 2020-01-18
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 2018-01-09
  • 1970-01-01
相关资源
最近更新 更多