【问题标题】:How to manage non-autoincrement primary key in Rails?如何管理 Rails 中的非自动增量主键?
【发布时间】:2013-08-01 20:07:37
【问题描述】:

在很多情况下,我希望在使用 Rails 时使用非自动增量主键。

示例:我在 A 和 B 之间存在一对一的关系。B 描述了添加到 A 的一些特定功能,因此没有 A 就无法存在。所以我们有:

A 有一个 B
B属于A

自然的想法是将 B.A_id 作为主键。所以我在迁移中尝试了create_table b, :id=>false,在B的模型中尝试了set_primary_key :a_id,但它并没有在数据库中创建实际的主键。我想要它们(以及外键),因为数据库不仅会被这个 Rails 应用程序使用。

如果我使用执行创建主键,它们不会进入 schema.rb,这很痛苦。现在我正在考虑一种解决方法:只要该列有唯一约束,我就可以在没有 PK 约束的情况下生活,所以我可以在迁移中使用 Rails 的 add_index ,这看起来更优雅。

有什么建议吗?

【问题讨论】:

  • 为什么不使用基于 sql 的模式?当然它不是数据库不可知论,但数据库不可知论被高估了,尤其是当它阻止你完成任务时。

标签: ruby-on-rails activerecord primary-key


【解决方案1】:

A very similar question on StackOverflow suggests 尝试类似:

create_table(:b, :id => false) do |t|
  t.integer :a_id, :options => 'PRIMARY KEY'
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多