Я пытаюсь перенести приложение Rails2 на Rails3 - это приложение предоставляет интерфейс для нескольких баз данных, одной из которых является SQL Server 2005. База данных SQL Server 2005 является устаревшей, поэтому я должен использовать set_table_name и set_primary_key как таковой:
class Project < ActiveRecord::Base
set_table_name "SpiraTest.TST_PROJECT"
set_primary_key "PROJECT_ID"
end
Запустив консоль, я вижу
irb(main):002:0> Project.primary_key
=> "PROJECT_ID"
irb(main):003:0> Project.table_name
=> "SpiraTest.TST_PROJECT"
irb(main):004:0>
Я даже могу использовать Project.find (: first), Project.find (: last) и т. Д. И получать данные. Что я не могу сделать, так это найти с помощью идентификатора, например: Project.find (1). Меня встречают:
NoMethodError: undefined method `eq' for nil:NilClass
from /usr/lib/ruby/gems/1.8/gems/activesupport-3.0.9/lib/active_support/whiny_nil.rb:48:in `method_missing'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.9/lib/active_record/relation/finder_methods.rb:317:in `find_one'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.9/lib/active_record/relation/finder_methods.rb:292:in `find_with_ids'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.9/lib/active_record/relation/finder_methods.rb:107:in `find'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.9/lib/active_record/base.rb:444:in `__send__'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.9/lib/active_record/base.rb:444:in `find'
from (irb):4
irb(main):005:0>
Я смотрю вниз через finder_methods и вижу, где в методе find_one это
record = where(primary_key.eq(id)).first
'primary_key' - ноль.
Я в растерянности - продолжу охотиться и посмотрю, что найду.
Драгоценные камни, используемые для полноты:
gem 'rails', '3.0.9'
gem 'mysql2', '< 0.3'
gem 'activerecord-sqlserver-adapter'
gem 'mongrel'
gem 'psrutil'
gem 'net-ldap'
gem 'spreadsheet'
gem 'ruby-odbc'