2010-06-13 23 views
8

Tôi đang cố gắng hiểu quy trình tạo bảng trong ruby-on-ray 3.tạo bảng trong ruby-on-ray 3 thông qua di chuyển?

tôi đã đọc về di chuyển. vì vậy tôi đang phải để tạo bảng bằng cách chỉnh sửa trong các tập tin trong:

Database Migrations/migrate/20100611214419_create_posts 
Database Migrations/migrate/20100611214419_create_categories 

nhưng họ đã được tạo ra bởi:

rails generate model Post name:string description:text 
rails generate model Category name:string description:text 

này có ý nghĩa tôi phải sử dụng "đường ray tạo ra mô hình" mọi lệnh tôi muốn để tạo một bảng?

nếu tôi tạo tệp di chuyển nhưng muốn thêm cột. thế nào để tôi tạo ra một tập tin di chuyển để thêm những người hoặc tôi chỉnh sửa các tập tin di chuyển hiện tại trực tiếp? các hướng dẫn nói với tôi để thêm một cái mới, nhưng đây là phần tôi không hiểu. tại sao tôi nên thêm một cái mới? nguyên nhân thì trạng thái mới sẽ phụ thuộc vào 2 tệp di chuyển.

và làm cách nào để thêm tệp di chuyển mới để cập nhật? lệnh là gì? và nếu tôi phải thả các cột hoặc chỉnh sửa chúng. làm thế nào để làm điều đó?

rails generate model Post name:string description:text 

khiến lệnh trên chỉ thêm cột.

và nếu tôi không sử dụng lệnh, làm cách nào để tạo tệp di chuyển?

trong symfony tôi chỉ chỉnh sửa tệp schema.yml trực tiếp, không có tệp di chuyển nào có phiên bản v.v.

và tôi nghĩ rằng trong django bạn chỉ cần tạo các mô hình và nó sẽ tạo ra các bảng cơ sở dữ liệu.

nhập mới vào ROR và muốn có hình ảnh tạo bảng.

nhờ

Trả lời

11

Nếu bạn muốn cập nhật bảng, bạn phải tạo tệp di chuyển mới vì mỗi lần di chuyển chỉ được thực hiện một lần trên cơ sở dữ liệu. Vì vậy, nếu bạn đã có bảng posts thì sau khi sửa đổi di chuyển create_posts, bạn sẽ không thể chạy lại.

Bạn có thể khôi phục di chuyển và sau đó chạy lại. Điều đó sẽ giải quyết vấn đề nhưng nó cũng sẽ phá hủy bảng và dữ liệu mà nó có thể giữ. Đây không phải là vấn đề nếu bạn vừa tạo di chuyển và sau đó nhận thấy rằng bạn đã bỏ lỡ một cột. Sau đó, bạn chỉ có thể thêm cột vào quá trình di chuyển, cuộn lại và di chuyển. Nhưng bạn không muốn làm điều đó trên một cơ sở dữ liệu sản xuất!

Để tạo một di dân mới, bạn chỉ cần chạy:

rails generate migration migration_name 

Nếu bạn gọi di cư của bạn add_*_to_table sau đó bạn cũng có thể vượt qua các đối số tương tự như trong generate model:

rails generate migration add_something_to_posts something:boolean 

này sẽ tự động tạo này di chuyển:

class AddSomethingToPosts < ActiveRecord::Migration 
    def self.up 
    add_column :posts, :something, :boolean 
    end 

    def self.down 
    remove_column :posts, :something 
    end 
end 

Điều này sẽ làm việc với remove_*_from_table quá:

rails generate migration remove_something_from_posts something:boolean 

Việc chuyển sẽ là:

class RemoveSomethingFromPosts < ActiveRecord::Migration 
    def self.up 
    remove_column :posts, :something 
    end 

    def self.down 
    add_column :posts, :something, :boolean 
    end 
end 

Dưới đây là some more methods mà bạn có thể sử dụng trong các cuộc di cư của bạn.

+2

Bạn không nên sửa đổi di chuyển trước khi khôi phục trừ khi khôi phục bị hỏng. Bởi vì khi bạn thêm cột mới, bạn cũng phải loại bỏ cột quay lại. Tuy nhiên, lược đồ db hiện không chứa cột mới, do đó, quá trình khôi phục không chính xác. Tôi không chắc chắn nếu nó lỗi này hay không, nhưng một cái gì đó để tránh. – alternative

5

Để tạo đứng file chuyển một mình, bạn sẽ sử dụng:

rails generate migration your_migration_name_here 

Khi bạn đi đến các tập tin được tạo ra, bạn có thể thực hiện bất kỳ SQL mà bạn thích, nhìn vào di cư tạo khác sẽ cung cấp cho bạn một điểm khởi đầu tốt là tốt.

Nói chung trong Rails, bạn có mô hình cho mọi bảng bạn có trong cơ sở dữ liệu của mình. Tôi không thể nghĩ ra bất kỳ trường hợp sử dụng cụ thể nào mà bạn sẽ có một bảng mà không có một số loại mô hình nào đó để truy cập vào dữ liệu đó. Nếu bạn muốn có được chiều sâu di chuyển, hãy truy cập here.

+1

Có một trường hợp. Bảng kết nối cho mối quan hệ has_and_belongs_to_many. –

1

Về câu hỏi này Điều này có nghĩa là tôi phải sử dụng lệnh rails generate model mỗi lần tôi muốn tạo bảng?

Hãy thử migration_for
Tôi thấy điều này hữu ích cho tôi. Tìm hướng dẫn trên author's blog

rails g migration_for create_table:posts add_column:posts:title:string add_column:posts:user_id:integer add_index:posts:user_id 
Các vấn đề liên quan