我的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)
答案 0 :(得分:0)
可能有更好的方法,但这里有一个宝石,我建议看看它看起来像是处理你的确切问题:
https://github.com/bjones/safe_attributes
它处理遗留数据库和奇怪的列名。如果这对您有用,请告诉我。如果没有别的,你可以看到他们在宝石代码中做了什么,并将它应用到你的情况。
Mike Riley
答案 1 :(得分:0)
我强烈建议将列名迁移到有效的Rails列名。如果由于某些原因这是不可能的,如果您的数据库支持可持久视图,则可以选择在该表的顶部设置具有有效属性名称的数据库视图。 评论中提到的rename-columns-hack肯定是解决方案最少的。 为了更好地理解Module#alias_attribute的工作原理,我建议您阅读Aliasing the Rails way。