Mặc dù lệnh này bỏ qua hầu hết các tùy chọn và khối nếu có, nhưng có thể hữu ích khi cung cấp các tùy chọn này trong phương thức thay đổi của quá trình di chuyển để có thể hoàn nguyên. Trong trường hợp đó, các tùy chọn và khối sẽ được sử dụng bởi #create_table
Di chuyển là một cách thuận tiện để thay đổi lược đồ cơ sở dữ liệu của bạn theo thời gian một cách nhất quán. Họ sử dụng Ruby DSL để bạn không phải viết SQL bằng tay, cho phép lược đồ và các thay đổi của bạn độc lập với cơ sở dữ liệu
Bạn có thể coi mỗi lần di chuyển là một 'phiên bản' mới của cơ sở dữ liệu. Một lược đồ bắt đầu không có gì trong đó và mỗi lần di chuyển sẽ sửa đổi lược đồ đó để thêm hoặc xóa bảng, cột hoặc mục nhập. Active Record biết cách cập nhật lược đồ của bạn theo dòng thời gian này, đưa lược đồ từ bất kỳ thời điểm nào trong lịch sử lên phiên bản mới nhất. Active Record cũng sẽ cập nhật tệp
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
0 của bạn để phù hợp với cấu trúc cập nhật của cơ sở dữ liệu của bạnĐây là một ví dụ về di chuyển
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
Bản saoQuá trình di chuyển này thêm một bảng có tên là
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
1 với một cột chuỗi có tên là class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
2 và một cột văn bản có tên là class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
3. Một cột khóa chính có tên là class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
4 cũng sẽ được thêm hoàn toàn, vì đây là khóa chính mặc định cho tất cả các kiểu Bản ghi Hoạt động. Macro class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
5 thêm hai cột, class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
6 và class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
7. Các cột đặc biệt này được Active Record tự động quản lý nếu chúng tồn tạiLưu ý rằng chúng tôi xác định thay đổi mà chúng tôi muốn xảy ra trong tương lai. Trước khi quá trình di chuyển này được chạy, sẽ không có bảng. Sau đó, bảng sẽ tồn tại. Active Record cũng biết cách đảo ngược quá trình di chuyển này. nếu chúng tôi quay lại quá trình di chuyển này, nó sẽ xóa bảng
Trên cơ sở dữ liệu hỗ trợ các giao dịch với các câu lệnh thay đổi lược đồ, quá trình di chuyển được bao bọc trong một giao dịch. Nếu cơ sở dữ liệu không hỗ trợ điều này thì khi quá trình di chuyển không thành công, các phần của cơ sở dữ liệu đã thành công sẽ không được khôi phục. Bạn sẽ phải khôi phục các thay đổi được thực hiện thủ công
Có một số truy vấn không thể chạy bên trong một giao dịch. Nếu bộ điều hợp của bạn hỗ trợ các giao dịch DDL, bạn có thể sử dụng
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
8 để tắt chúng cho một lần di chuyểnNếu bạn muốn di chuyển để làm điều gì đó mà Bản ghi Hoạt động không biết cách đảo ngược, bạn có thể sử dụng
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
9class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
1Bản saoNgoài ra, bạn có thể sử dụng
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
20 và class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
21 thay vì class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
22class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
5Bản saoQuá trình di chuyển được lưu trữ dưới dạng tệp trong thư mục
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
23, một tệp cho mỗi lớp di chuyển. Tên của tệp có dạng class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
24, nghĩa là dấu thời gian UTC xác định quá trình di chuyển, theo sau là dấu gạch dưới, sau đó là tên của quá trình di chuyển. Tên của lớp di chuyển [phiên bản CamelCased] phải khớp với phần sau của tên tệp. Ví dụ: class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
25 nên xác định lớp class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
26 và class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
27 nên xác định class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
28. Rails sử dụng dấu thời gian này để xác định di chuyển nào sẽ được chạy và theo thứ tự nào, vì vậy nếu bạn đang sao chép di chuyển từ ứng dụng khác hoặc tự tạo tệp, hãy lưu ý vị trí của nó theo thứ tựTất nhiên, việc tính toán dấu thời gian không có gì thú vị, vì vậy Active Record cung cấp một trình tạo để xử lý việc tạo dấu thời gian cho bạn
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
2Bản saoĐiều này sẽ tạo ra một di chuyển trống được đặt tên thích hợp
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
3Bản saoTrình tạo này có thể làm được nhiều việc hơn là thêm dấu thời gian vào tên tệp. Dựa trên các quy ước đặt tên và các đối số bổ sung [tùy chọn], nó cũng có thể bắt đầu hoàn thiện quá trình di chuyển
Nếu tên di chuyển có dạng "AddColumnToTable" hoặc "RemoveColumnFromTable" và theo sau là danh sách tên và loại cột thì quá trình di chuyển có chứa các câu lệnh và thích hợp sẽ được tạo
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
4Bản saosẽ tạo ra
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
Bản saoNếu bạn muốn thêm một chỉ mục trên cột mới, bạn cũng có thể làm điều đó
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
2Bản saosẽ tạo ra
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
29 thích hợp và báo cáoclass AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
8Bản saoTương tự, bạn có thể tạo di chuyển để xóa một cột khỏi dòng lệnh
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
9Bản saotạo ra
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
10Bản saoBạn không bị giới hạn ở một cột được tạo kỳ diệu. Ví dụ
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
11Bản saotạo ra
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
12Bản saoNếu tên di chuyển có dạng "CreateXXX" và theo sau là danh sách tên và loại cột thì quá trình di chuyển tạo bảng XXX với các cột được liệt kê sẽ được tạo. Ví dụ
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
13Bản saotạo ra
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
14Bản saoNhư mọi khi, những gì được tạo ra cho bạn chỉ là điểm khởi đầu. Bạn có thể thêm hoặc xóa khỏi nó khi bạn thấy phù hợp bằng cách chỉnh sửa tệp
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
83Ngoài ra, trình tạo chấp nhận loại cột là
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
84 [cũng có sẵn là class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
85]. Ví dụ,class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
15Bản saotạo cuộc gọi sau
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
16Bản saoQuá trình di chuyển này sẽ tạo cột
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
87. là cách viết tắt để tạo cột, chỉ mục, khóa ngoại hoặc thậm chí là cột liên kết đa hìnhNgoài ra còn có một trình tạo sẽ tạo các bảng tham gia nếu
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
88 là một phần của tênclass CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
17Bản saosẽ tạo ra sự di chuyển sau
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
18Bản saoTrình tạo mô hình, tài nguyên và giàn giáo sẽ tạo ra các di chuyển phù hợp để thêm một mô hình mới. Quá trình di chuyển này sẽ chứa các hướng dẫn để tạo bảng có liên quan. Nếu bạn cho Rails biết cột nào bạn muốn, thì các câu lệnh để thêm các cột này cũng sẽ được tạo. Ví dụ, chạy
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
19Bản saosẽ tạo ra một di chuyển giống như thế này
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
Bản saoBạn có thể nối bao nhiêu cặp tên/loại cột tùy thích
Một số thường được sử dụng có thể được chuyển trực tiếp trên dòng lệnh. Chúng được bao quanh bởi dấu ngoặc nhọn và theo kiểu trường
Ví dụ, chạy
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
51Bản saosẽ tạo ra một di chuyển giống như thế này
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
52Bản saoHãy xem đầu ra trợ giúp của trình tạo để biết thêm chi tiết
Khi bạn đã tạo quá trình di chuyển của mình bằng một trong các trình tạo, đã đến lúc bắt đầu làm việc
Phương pháp này là một trong những phương pháp cơ bản nhất, nhưng hầu hết thời gian, sẽ được tạo cho bạn từ việc sử dụng một mô hình, tài nguyên hoặc trình tạo giàn giáo. Một cách sử dụng điển hình sẽ là
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
53Bản saotạo một bảng
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
1 với một cột có tên là class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
2Theo mặc định,
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
89 sẽ tạo khóa chính có tên là class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
4. Bạn có thể thay đổi tên của khóa chính bằng tùy chọn class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
94 hoặc nếu bạn hoàn toàn không muốn có khóa chính, bạn có thể chuyển tùy chọn class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
95. Nếu bạn cần chuyển các tùy chọn cụ thể của cơ sở dữ liệu, bạn có thể đặt một đoạn SQL trong tùy chọn class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
96. Ví dụclass CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
54Bản saosẽ nối thêm
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
97 vào câu lệnh SQL được sử dụng để tạo bảngMột chỉ mục có thể được tạo trên các cột được tạo trong khối
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
89 bằng cách chuyển giá trị băm true hoặc tùy chọn cho tùy chọn class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
99class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
55Bản saoNgoài ra, bạn có thể chuyển tùy chọn
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
100 với bất kỳ mô tả nào cho bảng sẽ được lưu trữ trong chính cơ sở dữ liệu và có thể được xem bằng các công cụ quản trị cơ sở dữ liệu, chẳng hạn như MySQL Workbench hoặc PgAdmin III. Bạn nên chỉ định nhận xét trong quá trình di chuyển cho các ứng dụng có cơ sở dữ liệu lớn vì nó giúp mọi người hiểu mô hình dữ liệu và tạo tài liệu. Hiện tại chỉ có bộ điều hợp MySQL và PostgreSQL hỗ trợ nhận xétPhương thức di chuyển tạo bảng tham gia HABTM [có và thuộc về nhiều]. Một cách sử dụng điển hình sẽ là
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
56Bản saotạo một bảng
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
102 với hai cột có tên là class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
103 và class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
104. Các cột này có tùy chọn class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
105 được đặt thành class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
106 theo mặc định. Điều này có thể được ghi đè bằng cách chỉ định tùy chọn class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
107class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
57Bản saoTheo mặc định, tên của bảng tham gia xuất phát từ sự kết hợp của hai đối số đầu tiên được cung cấp cho create_join_table, theo thứ tự bảng chữ cái. Để tùy chỉnh tên của bảng, hãy cung cấp tùy chọn
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
108class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
58Bản saotạo một bảng
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
109class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
101 cũng chấp nhận một khối mà bạn có thể sử dụng để thêm các chỉ mục [không được tạo theo mặc định] hoặc các cột bổ sungclass CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
59Bản saoNgười anh em họ gần của
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
89 là , được sử dụng để thay đổi các bảng hiện có. Nó được sử dụng theo cách tương tự như class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
89 nhưng đối tượng được tạo ra cho khối biết nhiều thủ thuật hơn. Ví dụclass AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
20Bản saoloại bỏ các cột
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
3 và class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
2, tạo một cột chuỗi class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
116 và thêm một chỉ mục vào đó. Cuối cùng, nó đổi tên cột class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
117Giống như
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
80 và class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
29 Rails cung cấp phương thức di chuyểnclass AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
21Bản saoĐiều này thay đổi cột
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
116 trên bảng sản phẩm thành trường class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
122. Lưu ý rằng lệnh class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
120 là không thể đảo ngượcBên cạnh
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
120, các phương thức và được sử dụng cụ thể để thay đổi một ràng buộc không null và các giá trị mặc định của một cộtclass AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
22Bản saoThao tác này đặt trường
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
127 trên sản phẩm thành cột class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
128 và giá trị mặc định của trường class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
129 từ đúng thành saiBạn cũng có thể viết quá trình di chuyển
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
126 ở trên là class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
131, nhưng không giống như ví dụ trước, điều này sẽ khiến quá trình di chuyển của bạn không thể đảo ngượcCông cụ sửa đổi cột có thể được áp dụng khi tạo hoặc thay đổi cột
132 Thêm nhận xét cho cộtclass CreateProducts < ActiveRecord::Migration[7.1] def change create_table :products do |t| t.string :name t.text :description t.timestamps end end end
133 Chỉ định đối chiếu cho cộtclass CreateProducts < ActiveRecord::Migration[7.1] def change create_table :products do |t| t.string :name t.text :description t.timestamps end end end
134 hoặcclass CreateProducts < ActiveRecord::Migration[7.1] def change create_table :products do |t| t.string :name t.text :description t.timestamps end end end
135class CreateProducts < ActiveRecord::Migration[7.1] def change create_table :products do |t| t.string :name t.text :description t.timestamps end end end
136 Cho phép đặt giá trị mặc định trên cột. Lưu ý rằng nếu bạn đang sử dụng một giá trị động [chẳng hạn như ngày], giá trị mặc định sẽ chỉ được tính lần đầu tiên [i. e. vào ngày di chuyển được áp dụng]. Sử dụngclass CreateProducts < ActiveRecord::Migration[7.1] def change create_table :products do |t| t.string :name t.text :description t.timestamps end end end
137 choclass CreateProducts < ActiveRecord::Migration[7.1] def change create_table :products do |t| t.string :name t.text :description t.timestamps end end end
138class CreateProducts < ActiveRecord::Migration[7.1] def change create_table :products do |t| t.string :name t.text :description t.timestamps end end end
139 Đặt số ký tự tối đa cho cộtclass CreateProducts < ActiveRecord::Migration[7.1] def change create_table :products do |t| t.string :name t.text :description t.timestamps end end end
134 và số byte tối đa cho cộtclass CreateProducts < ActiveRecord::Migration[7.1] def change create_table :products do |t| t.string :name t.text :description t.timestamps end end end
141class CreateProducts < ActiveRecord::Migration[7.1] def change create_table :products do |t| t.string :name t.text :description t.timestamps end end end
142 Cho phép hoặc không cho phép giá trịclass CreateProducts < ActiveRecord::Migration[7.1] def change create_table :products do |t| t.string :name t.text :description t.timestamps end end end
138 trong cộtclass CreateProducts < ActiveRecord::Migration[7.1] def change create_table :products do |t| t.string :name t.text :description t.timestamps end end end
144 Chỉ định độ chính xác cho cộtclass CreateProducts < ActiveRecord::Migration[7.1] def change create_table :products do |t| t.string :name t.text :description t.timestamps end end end
145class CreateProducts < ActiveRecord::Migration[7.1] def change create_table :products do |t| t.string :name t.text :description t.timestamps end end end
146 Chỉ định tỷ lệ cho các cộtclass CreateProducts < ActiveRecord::Migration[7.1] def change create_table :products do |t| t.string :name t.text :description t.timestamps end end end
147 vàclass CreateProducts < ActiveRecord::Migration[7.1] def change create_table :products do |t| t.string :name t.text :description t.timestamps end end end
148, biểu thị số chữ số sau dấu thập phânclass CreateProducts < ActiveRecord::Migration[7.1] def change create_table :products do |t| t.string :name t.text :description t.timestamps end end end
Đối với
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
29 hoặc class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
120, không có tùy chọn thêm chỉ mục. Chúng cần được thêm riêng bằng cách sử dụng class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
82Một số bộ điều hợp có thể hỗ trợ các tùy chọn bổ sung;
Không thể chỉ định
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
142 và class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
136 qua dòng lệnhPhương thức
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
86 cho phép tạo một cột được đặt tên phù hợpclass AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
23Bản saoViệc di chuyển này sẽ tạo một cột
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
155 trong bảng người dùng. Nó cũng tạo một chỉ mục cho cột này, trừ khi được thông báo rõ ràng là không với tùy chọn class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
156class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
24Bản saoPhương thức
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
157 là bí danh của class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
86class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
25Bản saoTùy chọn đa hình sẽ tạo hai cột trên bảng gắn thẻ có thể được sử dụng cho các liên kết đa hình.
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
159 và class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
160Khóa ngoại có thể được tạo bằng tùy chọn
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
161class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
26Bản saoĐể biết thêm các tùy chọn
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
86, hãy truy cậpTài liệu tham khảo cũng có thể được gỡ bỏ
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
27Bản saoMặc dù không bắt buộc nhưng bạn có thể muốn thêm các ràng buộc khóa ngoại vào
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
28Bản saoCuộc gọi này thêm một ràng buộc mới vào bảng
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
164. Ràng buộc đảm bảo rằng một hàng trong bảng class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
165 tồn tại trong đó cột class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
4 khớp với class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
167Nếu tên cột
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
168 không thể bắt nguồn từ tên class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
169, bạn có thể sử dụng tùy chọn class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
170. Sử dụng tùy chọn class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
94 nếu khóa chính được tham chiếu không phải là class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
172Ví dụ: để thêm khóa ngoại trên
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
173 tham chiếu class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
174class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
29Bản saoclass CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
163 cũng hỗ trợ các tùy chọn như class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
2, class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
177, class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
178, class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
179 và class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
180Active Record chỉ hỗ trợ các khóa ngoại cột đơn.
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
181 và class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
182 được yêu cầu sử dụng khóa ngoại tổng hợp. Nhìn thấyKhóa ngoại cũng có thể được gỡ bỏ
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
30Bản saoNếu những người trợ giúp do Active Record cung cấp không đủ, bạn có thể sử dụng phương thức này để thực thi SQL tùy ý
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
31Bản saoĐể biết thêm chi tiết và ví dụ về các phương pháp riêng lẻ, hãy xem tài liệu API. Cụ thể là tài liệu về
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
184 [cung cấp các phương thức có sẵn trong các phương thức class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
22, class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
20 và class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
21], class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
188 [cung cấp các phương thức có sẵn trên đối tượng do class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
89 tạo ra] và class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
190 [cung cấp các phương thức có sẵn trên đối tượng do class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
112 tạo ra Phương pháp
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
22 là cách chính để viết di chuyển. Nó hoạt động cho phần lớn các trường hợp trong đó Bản ghi hoạt động biết cách tự động đảo ngược các hành động của quá trình di chuyển. Dưới đây là một số hành động mà class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
22 hỗ trợcũng có thể đảo ngược, miễn là khối chỉ gọi các hoạt động có thể đảo ngược như các thao tác được liệt kê ở trên
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
80 có thể đảo ngược nếu bạn cung cấp loại cột làm đối số thứ ba. Cung cấp cả các tùy chọn cột ban đầu, nếu không Rails không thể tạo lại cột chính xác khi khôi phụcclass AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
32Bản saoNếu bạn cần sử dụng bất kỳ phương pháp nào khác, bạn nên sử dụng phương pháp
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
9 hoặc viết phương pháp class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
20 và class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
21 thay vì sử dụng phương pháp class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
22Quá trình di chuyển phức tạp có thể yêu cầu xử lý mà Active Record không biết cách đảo ngược. Bạn có thể sử dụng để chỉ định những việc cần làm khi chạy di chuyển và những việc khác cần làm khi hoàn nguyên nó. Ví dụ
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
33Bản saoSử dụng
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
9 cũng sẽ đảm bảo rằng các hướng dẫn cũng được thực hiện theo đúng thứ tự. Nếu ví dụ di chuyển trước đó được hoàn nguyên, khối class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
21 sẽ được chạy sau khi cột class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
505 bị xóa và ngay trước khi bảng class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
506 bị xóaĐôi khi quá trình di chuyển của bạn sẽ làm điều gì đó đơn giản là không thể đảo ngược được; . Trong những trường hợp như vậy, bạn có thể tăng
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
507 trong khối class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
21 của mình. Nếu ai đó cố hoàn nguyên quá trình di chuyển của bạn, một thông báo lỗi sẽ hiển thị nói rằng không thể thực hiện đượcBạn cũng có thể sử dụng kiểu di chuyển cũ bằng phương pháp
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
20 và class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
21 thay vì phương pháp class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
22. Phương thức class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
20 sẽ mô tả phép biến đổi mà bạn muốn thực hiện đối với lược đồ của mình và phương thức class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
21 trong quá trình di chuyển của bạn sẽ hoàn nguyên các phép biến đổi được thực hiện bởi phương thức class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
20. Nói cách khác, lược đồ cơ sở dữ liệu sẽ không thay đổi nếu bạn thực hiện một class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
20 theo sau là một class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
21. Ví dụ: nếu bạn tạo một bảng theo phương thức class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
20, bạn nên bỏ nó vào phương thức class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
21. Sẽ là khôn ngoan khi thực hiện các phép biến đổi theo thứ tự ngược lại mà chúng được thực hiện trong phương pháp class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
20. Ví dụ trong phần class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
9 tương đương vớiclass AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
34Bản saoNếu quá trình di chuyển của bạn là không thể đảo ngược, bạn nên tăng
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
507 từ phương pháp class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
21 của mình. Nếu ai đó cố hoàn nguyên quá trình di chuyển của bạn, một thông báo lỗi sẽ hiển thị nói rằng không thể thực hiện đượcBạn có thể sử dụng khả năng của Bản ghi Hoạt động để khôi phục quá trình di chuyển bằng phương pháp
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
35Bản saoPhương pháp
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
525 cũng chấp nhận một khối hướng dẫn để đảo ngược. Điều này có thể hữu ích để hoàn nguyên các phần đã chọn của các lần di chuyển trước đó. Ví dụ: hãy tưởng tượng rằng class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
527 đã được cam kết và sau đó người ta quyết định rằng tốt nhất nên sử dụng xác thực Bản ghi Hoạt động, thay cho ràng buộc class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
528, để xác minh mã zipclass AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
36Bản saoQuá trình di chuyển tương tự cũng có thể được viết mà không cần sử dụng
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
525 nhưng điều này sẽ bao gồm một vài bước nữa. đảo ngược thứ tự của class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
89 và class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
9, thay thế class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
89 bằng class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
533 và cuối cùng thay thế class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
20 bằng class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
21 và ngược lại. Tất cả điều này được chăm sóc bởi class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
525Rails cung cấp một tập hợp các lệnh đường ray để chạy một số nhóm di chuyển nhất định
Lệnh đường ray liên quan đến di chuyển đầu tiên bạn sẽ sử dụng có thể sẽ là
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
537. Ở dạng cơ bản nhất, nó chỉ chạy phương thức class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
22 hoặc class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
20 cho tất cả các lần di chuyển chưa được chạy. Nếu không có di chuyển như vậy, nó sẽ thoát. Nó sẽ chạy các lần di chuyển này theo thứ tự dựa trên ngày di chuyểnLưu ý rằng việc chạy lệnh
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
540 cũng gọi lệnh class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
541, lệnh này sẽ cập nhật tệp class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
0 của bạn để phù hợp với cấu trúc cơ sở dữ liệu của bạnNếu bạn chỉ định một phiên bản mục tiêu, Bản ghi Hoạt động sẽ chạy các lần di chuyển được yêu cầu [thay đổi, lên, xuống] cho đến khi đạt đến phiên bản đã chỉ định. Phiên bản là tiền tố số trên tên tệp của quá trình di chuyển. Ví dụ: để chuyển sang phiên bản 20080906120000, hãy chạy
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
37Bản saoNếu phiên bản 20080906120000 lớn hơn phiên bản hiện tại [i. e. , nó đang di chuyển lên trên], thao tác này sẽ chạy phương thức
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
22 [hoặc class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
20] trên tất cả các lần di chuyển lên đến và bao gồm 20080906120000 và sẽ không thực hiện bất kỳ lần di chuyển nào sau này. Nếu di chuyển xuống dưới, điều này sẽ chạy phương thức class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
21 trên tất cả các lần di chuyển xuống, nhưng không bao gồm, 20080906120000Một nhiệm vụ phổ biến là khôi phục lần di chuyển cuối cùng. Ví dụ, nếu bạn mắc lỗi trong đó và muốn sửa nó. Thay vì theo dõi số phiên bản được liên kết với lần di chuyển trước, bạn có thể chạy
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
38Bản saoĐiều này sẽ khôi phục lần di chuyển mới nhất, bằng cách hoàn nguyên phương thức
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
22 hoặc bằng cách chạy phương thức class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
21. Nếu bạn cần hoàn tác một số lần di chuyển, bạn có thể cung cấp thông số class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
548class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
39Bản saosẽ hoàn nguyên 3 lần di chuyển cuối cùng
Lệnh
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
549 là một phím tắt để thực hiện khôi phục và sau đó di chuyển sao lưu lại. Như với lệnh class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
550, bạn có thể sử dụng tham số class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
548 nếu bạn cần quay lại nhiều phiên bản, chẳng hạnclass AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
40Bản saoCả hai lệnh đường ray này đều không làm bất cứ điều gì bạn không thể làm với
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
540. Chúng ở đó để thuận tiện, vì bạn không cần chỉ định rõ ràng phiên bản sẽ chuyển sangLệnh
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
553 sẽ tạo cơ sở dữ liệu, tải lược đồ và khởi tạo nó với dữ liệu gốcLệnh
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
554 sẽ xóa cơ sở dữ liệu và thiết lập lại. Đây là chức năng tương đương với class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
555Điều này không giống như chạy tất cả các lần di chuyển. Nó sẽ chỉ sử dụng nội dung của tệp
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
0 hoặc class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
557 hiện tại. Nếu không thể khôi phục quá trình di chuyển, class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
554 có thể không giúp được gì cho bạn. Để tìm hiểu thêm về kết xuất lược đồ, hãy xem phầnNếu bạn cần chạy một chuyển đổi cụ thể lên hoặc xuống, các lệnh
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
559 và class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
560 sẽ thực hiện điều đó. Ví dụ: chỉ cần chỉ định phiên bản phù hợp và quá trình di chuyển tương ứng sẽ có phương thức class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
22, class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
20 hoặc class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
21 được gọiclass AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
41Bản saosẽ chạy di chuyển 20080906120000 bằng cách chạy phương pháp
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
22 [hoặc phương pháp class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
20]. Lệnh này trước tiên sẽ kiểm tra xem quá trình di chuyển đã được thực hiện chưa và sẽ không làm gì nếu Bản ghi Hoạt động tin rằng nó đã được chạyMặc định chạy
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
537 sẽ chạy trong môi trường class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
567. Để chạy di chuyển sang môi trường khác, bạn có thể chỉ định nó bằng cách sử dụng biến môi trường class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
568 trong khi chạy lệnh. Ví dụ: để chạy di chuyển đối với môi trường class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
569, bạn có thể chạyclass AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
42Bản saoTheo mặc định, quá trình di chuyển cho bạn biết chính xác chúng đang làm gì và mất bao lâu. Việc di chuyển tạo bảng và thêm chỉ mục có thể tạo ra kết quả như thế này
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
43Bản saoMột số phương pháp được cung cấp trong quá trình di chuyển cho phép bạn kiểm soát tất cả điều này
MethodPurposeLấy một khối làm đối số và chặn bất kỳ đầu ra nào được tạo bởi khối đó. Lấy một đối số tin nhắn và xuất nó như là. Đối số boolean thứ hai có thể được chuyển để chỉ định có thụt lề hay không. Xuất văn bản cùng với thời gian chạy khối của nó. Nếu khối trả về một số nguyên, nó cho rằng đó là số hàng bị ảnh hưởngVí dụ, sự di cư này
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
44Bản saotạo ra đầu ra sau
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
45Bản saoNếu bạn muốn Bản ghi hoạt động không xuất ra bất cứ thứ gì, thì việc chạy
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
573 sẽ chặn tất cả đầu raThỉnh thoảng bạn sẽ mắc lỗi khi viết di chuyển. Nếu bạn đã chạy di chuyển, thì bạn không thể vừa chỉnh sửa di chuyển vừa chạy lại di chuyển. Rails cho rằng nó đã chạy quá trình di chuyển và do đó sẽ không làm gì khi bạn chạy
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
537. Bạn phải khôi phục quá trình di chuyển [ví dụ: với class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
575], chỉnh sửa quá trình di chuyển của mình, sau đó chạy class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
537 để chạy phiên bản đã sửaNói chung, chỉnh sửa di chuyển hiện tại không phải là một ý tưởng hay. Bạn sẽ tạo thêm công việc cho bản thân và đồng nghiệp của mình và gây ra nhiều vấn đề đau đầu nếu phiên bản di chuyển hiện có đã được chạy trên các máy sản xuất. Thay vào đó, bạn nên viết một di chuyển mới để thực hiện những thay đổi mà bạn yêu cầu. Việc chỉnh sửa một di chuyển mới được tạo chưa được cam kết kiểm soát nguồn [hay nói chung là chưa được phổ biến ra ngoài máy phát triển của bạn] là tương đối vô hại
Phương pháp
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
525 có thể hữu ích khi viết một lần di chuyển mới để hoàn tác toàn bộ hoặc một phần các lần di chuyển trước đó [xem bên trên]Di chuyển, mạnh mẽ như chúng có thể, không phải là nguồn có thẩm quyền cho lược đồ cơ sở dữ liệu của bạn. Cơ sở dữ liệu của bạn vẫn là nguồn có thẩm quyền. Theo mặc định, Rails tạo ra _______ cố gắng nắm bắt trạng thái hiện tại của lược đồ cơ sở dữ liệu của bạn
Việc tạo một phiên bản mới của cơ sở dữ liệu ứng dụng của bạn bằng cách tải tệp lược đồ qua
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
579 có xu hướng nhanh hơn và ít xảy ra lỗi hơn so với việc phát lại toàn bộ lịch sử di chuyển. có thể không áp dụng chính xác nếu những quá trình di chuyển đó sử dụng các phụ thuộc bên ngoài thay đổi hoặc dựa vào mã ứng dụng phát triển tách biệt với quá trình di chuyển của bạnCác tệp sơ đồ cũng hữu ích nếu bạn muốn xem nhanh các thuộc tính mà một đối tượng Bản ghi Hoạt động có. Thông tin này không có trong mã của mô hình và thường được lan truyền qua một số lần di chuyển, nhưng thông tin này được tóm tắt độc đáo trong tệp lược đồ
Định dạng của kết xuất lược đồ do Rails tạo được kiểm soát bởi cài đặt trong
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
581. Theo mặc định, định dạng là class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
582, nhưng cũng có thể được đặt thành class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
583Nếu
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
582 được chọn, thì lược đồ được lưu trữ trong class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
0. Nếu bạn nhìn vào tệp này, bạn sẽ thấy rằng nó trông rất giống một cuộc di chuyển rất lớnclass AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
46Bản saoTheo nhiều cách, đây chính xác là những gì nó là. Tệp này được tạo bằng cách kiểm tra cơ sở dữ liệu và thể hiện cấu trúc của nó bằng cách sử dụng
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
89, class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
82, v.v.class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
0 không thể diễn đạt mọi thứ mà cơ sở dữ liệu của bạn có thể hỗ trợ, chẳng hạn như trình kích hoạt, trình tự, thủ tục được lưu trữ, v.v. Mặc dù quá trình di chuyển có thể sử dụng class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
181 để tạo các cấu trúc cơ sở dữ liệu không được DSL di chuyển của Ruby hỗ trợ, nhưng các cấu trúc này có thể không được khôi phục bởi trình kết xuất lược đồ. Nếu bạn đang sử dụng các tính năng như thế này, bạn nên đặt định dạng lược đồ thành class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
583 để có được tệp lược đồ chính xác, hữu ích để tạo các phiên bản cơ sở dữ liệu mớiKhi định dạng lược đồ được đặt thành
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
583, cấu trúc cơ sở dữ liệu sẽ được kết xuất bằng công cụ dành riêng cho cơ sở dữ liệu vào class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
557. Ví dụ: đối với PostgreSQL, tiện ích class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
593 được sử dụng. Đối với MySQL và MariaDB, tệp này sẽ chứa đầu ra của class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
594 cho các bảng khác nhauĐể tải lược đồ từ
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
557, hãy chạy class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
579. Việc tải tệp này được thực hiện bằng cách thực thi các câu lệnh SQL chứa trong đó. Theo định nghĩa, điều này sẽ tạo ra một bản sao hoàn hảo của cấu trúc cơ sở dữ liệuVì các tệp lược đồ thường được sử dụng để tạo cơ sở dữ liệu mới, bạn nên kiểm tra tệp lược đồ của mình trong kiểm soát nguồn
Xung đột hợp nhất có thể xảy ra trong tệp lược đồ của bạn khi hai nhánh sửa đổi lược đồ. Để giải quyết những xung đột này, hãy chạy
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
537 để tạo lại tệp lược đồCách Active Record tuyên bố rằng trí thông minh thuộc về các mô hình của bạn, không phải trong cơ sở dữ liệu. Do đó, các tính năng như kích hoạt hoặc ràng buộc, đẩy một số thông tin tình báo đó trở lại cơ sở dữ liệu, không được sử dụng nhiều
Các xác thực như
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
598 là một cách mà các mô hình có thể thực thi tính toàn vẹn của dữ liệu. Tùy chọn class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
599 trên các liên kết cho phép các mô hình tự động hủy các đối tượng con khi cha mẹ bị hủy. Giống như bất kỳ thứ gì hoạt động ở cấp ứng dụng, những thứ này không thể đảm bảo tính toàn vẹn tham chiếu và vì vậy một số người bổ sung chúng trong cơ sở dữ liệuMặc dù Active Record không cung cấp tất cả các công cụ để làm việc trực tiếp với các tính năng như vậy, nhưng phương thức
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
181 có thể được sử dụng để thực thi SQL tùy ýMục đích chính của tính năng di chuyển Rails là đưa ra các lệnh sửa đổi lược đồ bằng một quy trình nhất quán. Di chuyển cũng có thể được sử dụng để thêm hoặc sửa đổi dữ liệu. Điều này hữu ích trong cơ sở dữ liệu hiện có không thể bị hủy và tạo lại, chẳng hạn như cơ sở dữ liệu sản xuất
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
47Bản saoĐể thêm dữ liệu ban đầu sau khi cơ sở dữ liệu được tạo, Rails có tính năng 'hạt giống' tích hợp giúp tăng tốc quá trình. Điều này đặc biệt hữu ích khi tải lại cơ sở dữ liệu thường xuyên trong môi trường phát triển và thử nghiệm. Để bắt đầu với tính năng này, hãy điền vào
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
201 một số mã Ruby và chạy class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
202class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
48Bản saoĐây thường là một cách sạch hơn nhiều để thiết lập cơ sở dữ liệu của một ứng dụng trống
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
0 hoặc class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
557 là ảnh chụp nhanh trạng thái hiện tại của cơ sở dữ liệu của bạn và là nguồn có thẩm quyền để xây dựng lại cơ sở dữ liệu đó. Điều này cho phép xóa các tệp di chuyển cũKhi bạn xóa các tệp di chuyển trong thư mục
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
205, bất kỳ môi trường nào mà class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
537 được chạy khi các tệp đó vẫn tồn tại sẽ giữ một tham chiếu đến dấu thời gian di chuyển dành riêng cho chúng bên trong bảng cơ sở dữ liệu Rails nội bộ có tên là class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
207. Bảng này được sử dụng để theo dõi xem việc di chuyển đã được thực hiện trong một môi trường cụ thể hay chưaNếu chạy lệnh
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
208, lệnh này hiển thị trạng thái [lên hoặc xuống] của mỗi lần di chuyển, bạn sẽ thấy class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
209 hiển thị bên cạnh bất kỳ tệp di chuyển đã xóa nào đã từng được thực thi trên một môi trường cụ thể nhưng không còn tìm thấy trong thư mục class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
205Có một báo trước, mặc dù. Các tác vụ cào để cài đặt di chuyển từ các công cụ là bình thường. Các lần di chuyển có trong ứng dụng gốc do cài đặt trước đó sẽ bị bỏ qua và những lần di chuyển bị thiếu sẽ được sao chép bằng dấu thời gian hàng đầu mới. Nếu bạn đã xóa di chuyển công cụ cũ và chạy lại tác vụ cài đặt, bạn sẽ nhận được các tệp mới có dấu thời gian mới và
class CreateProducts < ActiveRecord::Migration[7.1]
def change
create_table :products do |t|
t.string :name
t.text :description
t.timestamps
end
end
end
540 sẽ cố chạy lại chúngDo đó, bạn thường muốn duy trì các lần di chuyển đến từ các công cụ. Họ có một nhận xét đặc biệt như thế này
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
def change
add_column :products, :part_number, :string
end
end
49Bản saoPhản hồi
Bạn được khuyến khích giúp cải thiện chất lượng của hướng dẫn này
Vui lòng đóng góp nếu bạn thấy bất kỳ lỗi chính tả hoặc lỗi thực tế nào. Để bắt đầu, bạn có thể đọc phần của chúng tôi
Bạn cũng có thể tìm thấy nội dung không đầy đủ hoặc nội dung không được cập nhật. Vui lòng thêm bất kỳ tài liệu còn thiếu nào cho chính. Đảm bảo kiểm tra Hướng dẫn cạnh trước để xác minh xem sự cố đã được khắc phục hay chưa trên nhánh chính. Kiểm tra Hướng dẫn Hướng dẫn Ruby on Rails để biết phong cách và quy ước
Nếu vì bất kỳ lý do gì mà bạn phát hiện ra điều gì đó cần khắc phục nhưng không thể tự vá nó, vui lòng mở một vấn đề
Và cuối cùng nhưng không kém phần quan trọng, bất kỳ loại thảo luận nào liên quan đến tài liệu Ruby on Rails đều rất được hoan nghênh trên Diễn đàn Ruby on Rails chính thức