列中包含#的栏目名称和已损坏的activemodel

时间:2011-01-11 22:49:15

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

我有一个带有(可怕的)列名的遗留表,如LYEAR#2,LYEAR#3 ...... LYEAR#9

我为它设置了一个名为Glamas的模型

如果我有:

accounts = Glamas.all
account_mains = accounts.collect(&:ACCOUNT_MAIN)

它打破了这个错误:

SyntaxError: compile error
/usr/lib/ruby/gems/1.8/gems/activemodel-3.0.3/lib/active_model/attribute_methods.rb:273: syntax error, unexpected kUNDEF, expecting ')'
                    undef :LYEAR#9?
                         ^
/usr/lib/ruby/gems/1.8/gems/activemodel-3.0.3/lib/active_model/attribute_methods.rb:274: syntax error, unexpected kEND, expecting $end
    from /usr/lib/ruby/gems/1.8/gems/activemodel-3.0.3/lib/active_model/attribute_methods.rb:274:in `define_attribute_methods'
    from /usr/lib/ruby/gems/1.8/gems/activemodel-3.0.3/lib/active_model/attribute_methods.rb:262:in `each'
    from /usr/lib/ruby/gems/1.8/gems/activemodel-3.0.3/lib/active_model/attribute_methods.rb:262:in `define_attribute_methods'
from /usr/lib/ruby/gems/1.8/gems/activemodel-3.0.3/lib/active_model/attribute_methods.rb:261:in `each'
from /usr/lib/ruby/gems/1.8/gems/activemodel-3.0.3/lib/active_model/attribute_methods.rb:261:in `define_attribute_methods'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/attribute_methods.rb:13:in `define_attribute_methods'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.3/lib/active_record/attribute_methods.rb:41:in `method_missing'
from (irb):31:in `to_proc'
from (irb):31:in `collect'
from (irb):31
from :0

这是activemodel的问题,还是我可以用我的代码中的东西修复的东西?

这是轨道3顺便说一句。

#glamas.rb
class Glamas < ActiveRecord::Base
  establish_connection "turnkey"
end

和...

#database.yml
turnkey:
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: turnkey
  pool: 5
  username: root
  password:
  socket: /var/run/mysqld/mysqld.sock

我正在从传统机器中拉出表格,我猜(如果我绝对必须)我可以在将它们拉过来时重命名列,但这个过程已经是一个巨大的痛苦和处理器密集型。

1 个答案:

答案 0 :(得分:3)

您无法将这些表与Active Record一起使用。 AR为您的类定义实例方法,这些方法的名称与列相同,并且在方法名称中不允许使用ruby #(或者任何名称,因为它是注释字符)。

我建议使用更合理的名称在数据库中创建视图,或者只是重命名列。