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'
正在生成什麼SQL? –
它甚至不會生成SQL,因爲它無法確定要查找的主鍵的名稱。 – Joe
對不起。讀得太快。我有一個非常類似的設置。但我使用的是Rails v3.0.3和activerecord-sqlserver-adapter v3.0.9,並做了一個簡單的查找工作。 –