Ruby on rails 4 Rails 4,sqlserver适配器:使用alias_属性重命名旧属性
处理具有非常规命名的遗留系统。请注意,所有表和属性都是大写的,这在sqlserver适配器中意味着ID与ID不同 我认为alias_attribute:new,:OLD允许您指定一个可以在ActiveRecord/ActiveRelation查询中使用的名称。从下面我在rails控制台中看到的测试结果来看,情况并非如此 最终目标是通过使每个模型都有一个ID属性等,使遗留系统在Rails传统方法中工作 模型定义: 不起作用: 组织。选择:id=>无效的列名“id” 组织。选择:ID=>无效的列名“ID” Organization.selectID=>列名“ID”无效 是否有效: 组织。选择:组织\u id=> 组织。选择:组织\u ID=> Organization.selectorganization\u id=>Ruby on rails 4 Rails 4,sqlserver适配器:使用alias_属性重命名旧属性,ruby-on-rails-4,database-design,legacy-database,Ruby On Rails 4,Database Design,Legacy Database,处理具有非常规命名的遗留系统。请注意,所有表和属性都是大写的,这在sqlserver适配器中意味着ID与ID不同 我认为alias_attribute:new,:OLD允许您指定一个可以在ActiveRecord/ActiveRelation查询中使用的名称。从下面我在rails控制台中看到的测试结果来看,情况并非如此 最终目标是通过使每个模型都有一个ID属性等,使遗留系统在Rails传统方法中工作 模型定义: 不起作用: 组织。选择:id=>无效的列名“id” 组织。选择:ID=>无效的列名“
Organization.selectORGANIZATION\u ID=>我前几天刚用了alias\u属性。老实说,我一直在戳它,直到我的工作 我可以通过反转传递给alias_属性的参数来实现您所寻找的功能 例如:
alias_attribute :active?, :active
alias_attribute :alert, :message
alias_attribute :delete_at, :expire_at
其中第一个参数是列名,第二个参数是别名。
我从文档中了解到这似乎是倒退的,但这就是我如何做到这一点的。我通过配置DB适配器MS SQL Server将模式视为所有小写字母来解决此问题。因此,即使实际的DB表名可以是USERS、PEOPLE等,我也可以在我的应用程序中将它们引用为USERS、PEOPLE等 见: 以下是我为解决此问题而添加的代码:
# config/initializers/sql_server_adapter.rb
ActiveRecord::ConnectionAdapters::SQLServerAdapter.lowercase_schema_reflection = true
我试着换了它们,但还是遇到了同样的问题。关于您的特定示例,Rails已经添加了一个?返回每个属性的末尾,并返回一个布尔值。您不需要自己创建查询属性。
# config/initializers/sql_server_adapter.rb
ActiveRecord::ConnectionAdapters::SQLServerAdapter.lowercase_schema_reflection = true