2012-04-09 25 views
5

Làm cách nào tôi có thể đặt khóa chính cho trường IdClient của mình? Tôi đã thử tất cả các phương pháp, nhưng tôi sẽ gặp lỗi (đường ray 3.0.9) ... Bạn có thể giúp tôi không?Cách đặt khóa chính trong ruby ​​khi di chuyển đường ray?

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 

Ngoài ra cách đặt quan hệ trong mô hình?

Trả lời

16

Đừng làm điều này. Sử dụng trường id được tích hợp làm khóa chính. Nếu bạn định sử dụng Rails, bạn nên tạo ứng dụng của mình là "Đường ray" trừ khi bạn có rất lý do chính đáng không nên làm.

Nếu bạn thực sự muốn làm điều này, bạn có thể vượt qua một :primary_key tùy chọn để create_table:

create_table :customers, :primary_key => :idClient do |t| 
    # ... 
end 

Bạn cũng sẽ cần phải nói với mô hình của bạn tên của khóa chính của nó thông qua self.primary_key = "idClient"

+0

nhưng tại sao Không? Vì vậy, tôi không cần nữa idclient trường của tôi? – byCoder

+0

@ ovatsug25 bạn đã đọc xong câu trả lời của tôi chưa? Điều đó sẽ được bao phủ bởi "* lý do rất tốt *" mà tôi đã đề cập. – meagar

+0

ohhh, tôi biết ... cảm ơn bạn đã chỉ ra kỹ thuật ... nhưng tôi vẫn không thực sự muốn làm điều đó ... – ovatsug25

Các vấn đề liên quan