имена столбцов с # в них рельсами и неработающей моделью - PullRequest
2 голосов
/ 12 января 2011

У меня есть устаревшая таблица с (ужасными) именами столбцов, такими как 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 Ответ

3 голосов
/ 12 января 2011

Вы не сможете использовать эти таблицы с Active Record.AR определяет методы экземпляра для ваших классов, имена которых совпадают с именами столбцов и в ruby ​​# не допускается в именах методов (или любых именах в этом отношении, поскольку это символ комментария).Я бы предложил создать представления в базе данных с более разумными именами или просто переименовать столбцы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...