【发布时间】:2012-07-20 13:44:10
【问题描述】:
这是一个问题 I asked before 的构建(没有任何运气)。
我有一个使用字符串作为主键的模型:
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
编辑
没有人指出这一点,但我现在很清楚,真正的答案是“仅仅因为你可以,并不意味着你应该!”
【问题讨论】:
-
在创建表和模型时,您是否在迁移时添加了
:id => false? -
或者你可以看看这个问题:stackoverflow.com/questions/1200568/…
-
请在此处包含您的迁移文件。
标签: ruby-on-rails postgresql activerecord heroku