【问题标题】:Specify custom primary key in migration在迁移中指定自定义主键
【发布时间】:2011-09-18 03:12:52
【问题描述】:

我有一个数据结构:

  t.integer :userID
  t.string :apikey
  t.integer :characterID

userID应该是主键(名字不重要,可以默认为:id)。但是,我不希望它自动递增或其他任何东西,只需将提供的值写入数据库即可。

我必须如何调整迁移和模型才能达到我想要的效果?

【问题讨论】:

    标签: ruby-on-rails rake


    【解决方案1】:
     create_table(:my_table, :primary_key => 'userID') do |t|
       # Primary key column will be created automatically
       # Do not create here
       # t.column :userID, :integer, :null => false
       ...
     end
    

    或者

    create_table :my_table, {:id => false} do |t|
      t.integer :userID
      t.string :apikey
      t.integer :characterID
      t.timestamps
     end
     execute "ALTER TABLE my_table ADD PRIMARY KEY (userID);"
    

    别忘了把这条线放在模型的某个地方:

     set_primary_key :userID
    

    【讨论】:

    • 在你的第一个例子中,不应该是:integer吗? userID 仍然是 integer,而不是 varchar。
    • @MohitJain:是否有必要使用您建议的两种方法放置“set_primary_key”,或者“set_primary_key”仅用于第二种方法?
    • @Eduardo 在这两种情况下。
    【解决方案2】:

    我没有绕过 ActiveRecord 模型,而是将userID 设为普通列并使用

    validates_uniqueness_of :userID, :message => "userID needs to be unique"
    

    在模型上进行验证。

    【讨论】:

    • 您添加了索引吗?如果您要使用userId 进行搜索,这是必不可少的。
    猜你喜欢
    • 1970-01-01
    • 2013-10-03
    • 2021-12-31
    • 2018-07-11
    • 2020-05-10
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多