如何在Ruby on Rails迁移中设置主键?

11

我该如何为我的IdClient字段设置主键?我尝试了所有的方法,但是都会出现错误(Rails 3.0.9)...你能帮帮我吗?

class CreateCustomers < ActiveRecord::Migration
  def self.up
    create_table :customers do |t|
      t.integer :IdCustomer
      t.string :username
      t.string :crypted_password
      t.string :password_salt
      t.string :persistence_token
      t.string :email
      t.string :Skype
      t.string :ICQ
      t.string :Firstname
      t.string :Lastname
      t.string :Country
      t.string :State
      t.string :City
      t.string :Street
      t.string :Building
      t.integer :Room
      t.string :AddressNote
      t.date :DateOfReg
      t.integer :CustGroup
      t.float :TotalBuy

      t.timestamps
      add_index(:customers, :IdCustomer, :unique => true)
    end
  end

  def self.down
    drop_table :customers
  end
end

同时,如何在模型中设置关系?
1个回答

27
不要这样做。使用内置的id字段作为主键。如果您要使用Rails,则应该按照“Rails方式”构建应用程序,除非您有非常好的理由不这样做。
如果您真的想这样做,可以将:primary_key选项传递给create_table
create_table :customers, :primary_key => :idClient do |t|
  # ...
end

你还需要告诉你的模型它的主键名,通过 self.primary_key = "idClient"


但为什么不需要呢?这意味着我不再需要我的客户端ID字段吗? - byCoder
1
有时候传统表格的主键和标准的 “Rails方式” 即 id 不同。如果要覆盖,请谨慎,因为其他人不会预期这种变化。另外,在较新版本的Rails中,您还需要添加 id: false 以防它尝试创建 id 列。 - Ken Mayer
1
我认为,“表的主键不应该被称为ID”(可能有更适合的列名)这么简单的理由是一个简单而有效的理由。 - Francesco Belladonna
@FrancescoBelladonna 抱歉,在Rails中,那不是一个有效的理由。Rails是一个有见解的框架,如果你想让它对你有用,你需要(几乎是必须)遵循它的约定。Rails假设你的表的主键是id,如果你正在启动一个新的Rails应用程序,你应该按照这些约定来工作。如果你的观点不同,在Rails的范围内,你的观点就是错误的。 - user229044

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接