2009-05-19 25 views
6

Hãy nói rằng tôi có thể tạo một bảng trong một di chuyển Rails, quy định cụ thể để bỏ qua cột ID:Trong quá trình di chuyển Rails, có thể chỉ ra rằng một cột mới được thêm vào phải là trước hoặc sau một cột hiện có trong bảng?

create_table :categories_posts, :id => false do |t| 
    t.column :category_id, :integer, :null => false 
    t.column :post_id, :integer, :null => false 
end 

Sau đó tôi quyết định tôi muốn thêm một cột ID là khóa chính vì vậy tôi tạo ra một sự chuyển đổi mới:

class ChangeCategoriesToRichJoin < ActiveRecord::Migration 
    def self.up 
    add_column :categories_posts, :id, :primary_key 
    end 

    def self.down 
    remove_column :categories_posts, :id 
    end 
end 

Nhưng khi tôi nhìn vào bảng sau khi tôi di chuyển, nó trông như thế này:

category_id 
post_id 
id 

id cột ở vị trí cuối cùng trong bảng, trong khi không có rmally một cột id sẽ là đầu tiên.

Có cách nào để thay đổi di chuyển ChangeCategoriesToRichJoin để nhấn mạnh vào cột id đang được tạo TRƯỚC KHI cột category_id trong bảng không?

Hoặc tôi có cần phải bỏ bảng và thêm cột trong định nghĩa "tạo bảng" không?

Trả lời

1

Tôi chưa thể đặt các cột theo thứ tự, nhưng với Rails bạn có thể khôi phục, thay đổi tệp di chuyển cũ để thêm cột mới theo thứ tự bạn muốn, sau đó di chuyển lại di chuyển cũ bao gồm cả trường mới. Nó không chính xác lý tưởng, nhưng khả năng di chuyển và khôi phục dễ dàng, nó có thể hoạt động nếu bạn đủ OCD để yêu cầu thứ tự cột. : P

Tôi không phải là chuyên gia, nhưng tôi đã đọc rất nhiều tài liệu Rails (và rất gần đây) và không thể nhớ lại việc tìm kiếm giải pháp cho việc này.

+0

Đó là sự nghi ngờ của tôi. Cảm ơn về lời xác nhận. –

5

Sử dụng :after => :another_column_name, ví dụ .:

change_table :users do |t| 
    t.integer :like_count, :default => 0, :after => :view_count 
end 
+0

Đây là câu trả lời thực tế! Cảm ơn. – digidigo

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