这是基于我之前提出的一个问题(没有任何运气)。
我有一个使用字符串作为主键的模型:
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”字段会有帮助吗?
- 您还有其他最佳实践推荐吗?
谢谢你的帮助!
德里克。
编辑:
按要求添加迁移文件:
class CreateEmployees < ActiveRecord::Migration
def change
create_table :employees do |t|
t.string :employment_id, :unique => true
etc...
end
end
end
编辑
非常好心的没有人指出这一点,但我现在很清楚,真正的答案是“仅仅因为你可以,并不意味着你应该!”