Rails 3, sqlserver, использование set_primary_key и невозможность найти с определенным идентификатором - PullRequest
1 голос
/ 13 июля 2011

Я пытаюсь перенести приложение 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'

1 Ответ

0 голосов
/ 11 августа 2011

Убедитесь, что используете set_primary_key и обратите внимание, что он чувствителен к регистру.

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