2011-07-13 40 views
1

我試圖將Rails2應用程序移植到Rails3 - 此應用程序提供了多個數據庫的前端,其中一個是SQL Server 2005該SQL Server 2005數據庫是傳統的,所以我必須使用set_table_name和set_primary_key這樣:Rails 3,sqlserver,使用set_primary_key,並且無法使用特定ID查找

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(:第一),Project.find(:last)等,並檢索數據。我不能做的是使用一個id,像這樣: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,可以看到在

record = where(primary_key.eq(id)).first 

「primary_key」是零的find_one方法。

我對此不知所措 - 我會繼續打獵並看看我找到了什麼。被用於完整性

寶石:

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' 
+0

正在生成什麼SQL? –

+0

它甚至不會生成SQL,因爲它無法確定要查找的主鍵的名稱。 – Joe

+0

對不起。讀得太快。我有一個非常類似的設置。但我使用的是Rails v3.0.3和activerecord-sqlserver-adapter v3.0.9,並做了一個簡單的查找工作。 –

回答

0

確保使用set_primary_key並注意,它是區分大小寫。