这是建立在问题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