文字列を主キーとして使用しているモデルがあります。
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 を使用しています。
何が起こっているのでしょうか?私が持っていた 1 つのアイデアは、現在は冗長になっている 'id' 列を取り除くことでしたが、今後さらに苦労するのではないかと心配しています。何をアドバイスしますか?