ActiveRecord/ActiveModel属性区分大小写

ActiveRecord/ActiveModel属性区分大小写,activerecord,activemodel,Activerecord,Activemodel,我正在将一个遗留应用程序从MS-SQL迁移到Postgres,后者使用Rails访问数据 MS-SQL中的列是大写的,在使用activerecord SQL server适配器时,它们的读取方式如下: CREATE VIEW mymodel AS SELECT at.someattribute , at.someattribute AS "SomeAttribute" FROM actual_table at var something=my_m

我正在将一个遗留应用程序从MS-SQL迁移到Postgres,后者使用Rails访问数据

MS-SQL中的列是大写的,在使用activerecord SQL server适配器时,它们的读取方式如下:

CREATE VIEW mymodel AS
    SELECT
        at.someattribute
        , at.someattribute AS "SomeAttribute"
    FROM actual_table at
var something=my_model.sometAttribute

尽管它是常量,但似乎并不重要,因为应用程序只从MSSQL数据库读取数据

我现在遇到的问题是,在转移到postgres之后,它将所有列名等转换为小写(因为SQL不区分大小写)。现在,当我尝试访问模型上的
SomeAttribute
时,它会引发一个
ActiveModel::MissingAttributeError
,因为它现在是小写的

症状的一些例子:

p.SomeAttribute
=> ActiveModel::MissingAttributeError: missing attribute: SomeAttribute

p.read_attribute(:SomeAttribute)
=> nil

p.has_attribute?(:SomeAttribute)
=> false

p.read_attribute(:someattribute)
=> 'expected value'
有什么方法可以让ActiveRecord/ActiveModel在尝试检索属性名称之前将其转换为小写?

免责声明:这是一个非常临时的解决方案-绝对不是“正确”的做法

创建如下视图:

CREATE VIEW mymodel AS
    SELECT
        at.someattribute
        , at.someattribute AS "SomeAttribute"
    FROM actual_table at

在SQL中使用双引号保留了这种情况。

我目前正在处理两个不同的项目,使用Rails连接到一个旧的MS SQL Server数据库……表名和列名与Rails预期的不匹配

在我最近的一个项目中,我想我已经找到了金蛋:-),那就是根本不改变Rails方面的任何东西来让事情正常运行——金蛋是使用SQL视图来“转换”将遗留表转换成Rails能够理解的内容——我目前在开发中有一个项目,我正在开发一个非常好的项目,我不必尝试在Rails端为任何表或列命名,因为当它到达我的Rails应用程序时,一切看起来都很好。我现在发布这篇文章是因为我在第一个项目中有很多问题需要解决,我认为这可能会让其他人的生活变得更轻松,而且我还没有在其他地方找到这个解决方案

例如,假设您在Microsoft SQL Server 2008R2中有一个名为“Contact table”的旧表,它的列名很奇怪,如下所示:

Contact-Table:
    ID_Primary
    First Name
    Last Name
使用MS SQL表视图,您可以“重新创建”同一个表。创建基于旧表的视图;将视图命名为您希望在Rails中调用的“表”,并使用列别名重命名列。因此,这里我们可以创建一个名为“contacts”(与Rails约定一致)的视图,其中包含以下列:

contacts:
    id             (alias for ID_Primary)
    first_name     (alias for First Name)
    last_name      (alias for Last Name)

然后在Rails模型中,您所需要做的就是链接到MS SQL中的“contacts”表,并且您的列名可以按预期使用。到目前为止,我已经做到了这一点,它与微小的tds宝石和免费的tds。我还可以查询、创建和更新记录和Rails关联(有很多/属于等等)。我对使用MS SQL表视图而不是以前使用的其他方法让Rails与遗留数据库对话感到非常兴奋!我很想听听别人怎么想。

你有没有想过?