Ruby I';m使用alias_属性,但遗留字段仍导致语法错误

Ruby I';m使用alias_属性,但遗留字段仍导致语法错误,ruby,activerecord,ruby-on-rails-4,Ruby,Activerecord,Ruby On Rails 4,我的rails应用程序连接到一个遗留数据库,其中有一个带有空格的列。我创建了一个alias_属性,它允许我访问上述字段,但如果我尝试访问后来定义的字段,我会得到一个语法错误。如何告诉rails只使用alias_属性而忽略带有空格的字段 class Atg < ActiveRecord::Base alias_attribute :modified_ts, :'Modified TS' end => #<Atg primary_shot: nil, product_id: "

我的rails应用程序连接到一个遗留数据库,其中有一个带有空格的列。我创建了一个alias_属性,它允许我访问上述字段,但如果我尝试访问后来定义的字段,我会得到一个语法错误。如何告诉rails只使用alias_属性而忽略带有空格的字段

class Atg < ActiveRecord::Base
 alias_attribute :modified_ts, :'Modified TS'
end

=> #<Atg primary_shot: nil, product_id: "1000000007", category_number: nil, vm_ready: nil, Modified TS: "2014-02-28 07:31:40", size_code: "NS1003715">

也许有更好的方法,但我推荐看一个宝石,它看起来与你的确切问题有关:

它处理遗留数据库和奇怪的列名。让我知道这是否适合你。如果没有其他内容,您可能会看到他们在gem代码中做了什么,并将其应用于您的情况


Mike Riley

我强烈建议将列名迁移到有效的Rails列名。如果由于某些原因不可能这样做,那么如果您的数据库支持持久化视图,则可以选择在该表的顶部使用有效的属性名称设置DB视图。 评论中提到的解决方案肯定是最简单的解决方案。
为了更好地理解它是如何工作的,我建议阅读。

这似乎没有起到作用,Rails 4似乎已经使这个gem过时了。我认为您遇到的问题是alias_属性只定义了一个新方法,但仍然会调用旧方法。换句话说,即使您修改了\u ts,它仍在调用“modified ts”。别名属性只是调用同一列的另一种方式。我找到了这个。这似乎是一个黑客,但它可能会工作:。这是一个有趣的问题。希望我能帮你弄明白。
/home/action/.rvm/gems/ruby-2.1.1/gems/activerecord-4.1.0/lib/active_record/attribute_methods/time_zone_conversion.rb:36: formal argument cannot be a constant def Modified TS=(time)