這是建立在問題I asked before(沒有任何運氣)。在Rails/Postgres中使用字符串主鍵時,我應該刪除默認的「id」字段嗎?
我有哪裏我使用一個字符串作爲主鍵的模式:
class Employee < ActiveRecord::Base
self.primary_key = "employment_id"
end
此表還包含了Rails默認的「ID」字段,具有唯一性約束。
當我在本地添加一個新員工時,它一切正常,Rails自動生成一個新的唯一ID。
但是,當我在Heroku Postgres上運行它時,它將'id'和'employment_id'視爲同一個字段。我試圖通過手動設置一個唯一的ID來解決這個問題,但仍獲得此行爲:
Employee.new do |s|
max_id = Employee.maximum(:id)
puts max_id.to_s # => 1803
s.employment_id = "fred_01"
s.id = max_id + 1
puts employment_id.to_s # => 1804
end
我運行的Postgres 9.1.3本地(和Heroku的是9.1.4)。我在Rails 3.2.3上。
我的問題是:
- 任何想法是怎麼回事?
- 您認爲我正在使用employment_id作爲主鍵嗎?
- 如果我刪除'id'字段會有幫助嗎?
- 有什麼其他的最佳做法,你會推薦?
感謝您的幫助!
德里克。
編輯:根據要求
添加遷移文件:
編輯
很親切的人的指出這一點,但現在已經清楚,我認爲真正的答案是「只因爲你可以,並不意味着你應該!」
難道你把':ID => FALSE'上遷移,創建表和模型時? – MurifoX 2012-07-20 13:54:01
或者你可以看看這個問題:http://stackoverflow.com/questions/1200568/using-rails-how-can-i-set-my-primary-key-to-not-be-an-integer-typed -column – MurifoX 2012-07-20 13:55:13
請註明您遷移文件在這裏。 – gabrielhilal 2012-07-20 14:21:40