我使用alias_attribute但遗留字段仍然导致语法错误

时间:2014-05-21 18:09:11

标签: ruby activerecord ruby-on-rails-4

我的rails应用程序连接到旧数据库,并且其中有一个空格的列。我创建了一个alias_attribute并允许我访问所述字段,但如果我尝试访问之后定义的字段,则会出现语法错误。如何告诉rails只使用alias_attribute并忽略带空格的字段?

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">

错误如果我尝试检索size_code,我会得到:

/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)

2 个答案:

答案 0 :(得分:0)

可能有更好的方法,但这里有一个宝石,我建议看看它看起来像是处理你的确切问题:

https://github.com/bjones/safe_attributes

它处理遗留数据库和奇怪的列名。如果这对您有用,请告诉我。如果没有别的,你可以看到他们在宝石代码中做了什么,并将它应用到你的情况。

Mike Riley

答案 1 :(得分:0)

我强烈建议将列名迁移到有效的Rails列名。如果由于某些原因这是不可能的,如果您的数据库支持可持久视图,则可以选择在该表的顶部设置具有有效属性名称的数据库视图。 评论中提到的rename-columns-hack肯定是解决方案最少的。 为了更好地理解Module#alias_attribute的工作原理,我建议您阅读Aliasing the Rails way