これは、私が以前に尋ねた質問に基づいたものです(運がない場合)。
文字列を主キーとして使用しているモデルがあります。
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
私はpostgres9.1.3をローカルで実行しています(そしてHerokuは9.1.4にあります)。私はRails3.2.3を使用しています。
私の質問は次のとおりです。
- ここで何が起こっているのか分かりますか?
- 主キーとしてemployment_idを使用しているのは正しいと思いますか?
- 'id'フィールドを削除すると役に立ちますか?
- 他に推奨するベストプラクティスはありますか?
ご協力いただきありがとうございます!
デレク。
編集:
要求に応じて移行ファイルを追加します。
class CreateEmployees < ActiveRecord::Migration
def change
create_table :employees do |t|
t.string :employment_id, :unique => true
etc...
end
end
end
編集
これを指摘する人はほとんどいませんが、本当の答えは「できるからといって、そうすべきだという意味ではありません」ということは明らかです。