ruby-on-rails - 列名称中包含 #rails 和损坏的 activemodel

标签 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 的问题吗?还是我可以用代码中的某些内容来修复它?

顺便说一句,这是 Rails 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

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

最佳答案

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

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

关于ruby-on-rails - 列名称中包含 #rails 和损坏的 activemodel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4663574/

相关文章:

ruby-on-rails - Rails.cache.fetch 异常 : TypeError (<ModelName> can't be referred to)

ruby-on-rails - 检测 rails has_many :through relationship 中的变化

ruby-on-rails - Rails 急切加载,可能的错误

ruby-on-rails - 如何定义在 Ruby on Rails 5.2 中的 ActiveRecord 迁移中创建表时使用的顺序?

ruby-on-rails - Rails/ActiveRecord .where 方法命名与 Ruby Gem 类方法的冲突

ruby-on-rails - Twilio:接收短信并处理正文内容

javascript - 将 JSON 对象从 Rails Controller 发送到 Javascript

ruby-on-rails-3 - $ rspec 规范/不适合我。请帮忙

ruby-on-rails - 如何在 Rails 3 应用程序中分析请求

ruby-on-rails - 如何使用 ruby​​ on Rails 中的唯一字段获取不区分大小写的唯一字段?