Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 Rails 4,sqlserver适配器:使用alias_属性重命名旧属性_Ruby On Rails 4_Database Design_Legacy Database - Fatal编程技术网

Ruby on rails 4 Rails 4,sqlserver适配器:使用alias_属性重命名旧属性

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=>无效的列名“

处理具有非常规命名的遗留系统。请注意,所有表和属性都是大写的,这在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=>


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