Gán giá trị mặc định trong khi tạo tệp di chuyển


104
rails generate migration AddRetweetsCountToTweet retweets_count:integer 

Được rồi, tôi sử dụng dòng trên để tạo tệp di chuyển tự động tạo mã trong tệp đã tạo để thêm cột vào Tweet mô hình với số nguyên kiểu dữ liệu. Bây giờ tôi muốn thêm giá trị mặc định vào cột đã thêm trong khi tạo tệp di chuyển. Điều đó có thể không? Tôi đã truy cập nó nhưng không thể tìm thấy. Con trai cần giúp đỡ.


xem RailsGuide về chủ đề: Guide.rubyonrails.org/migrations.html thông tin bạn đang tìm kiếm có trong phần đầu tiên Giải phẫu một cuộc di cư
Austin Lin

1
Tôi biết chính xác ý của bạn là gì. Tôi cũng tiếp tục cố gắng đặt một giá trị mặc định và việc cố gắng tìm kiếm thông tin thực sự rất khó khăn. Chỉ việc tạo SQL thô đã dễ dàng hơn, mặc dù sau đó không có sự di chuyển trong kiểm soát phiên bản.
Tass

Câu trả lời:


166

Trình tạo di chuyển mặc định không xử lý các giá trị mặc định (công cụ sửa đổi cột được hỗ trợ nhưng không bao gồm defaulthoặc null), nhưng bạn có thể tạo trình tạo của riêng mình.

Bạn cũng có thể cập nhật thủ công tệp di chuyển trước khi chạy rake db:migratebằng cách thêm các tùy chọn vào add_column:

add_column :tweet, :retweets_count, :integer, :null => false, :default => 0

... và đọc Rails API


9
Được rồi, cảm ơn đã hồi đáp. Tôi nghĩ sẽ thật tuyệt nếu trình tạo di chuyển mặc định cung cấp tùy chọn xử lý các giá trị mặc định để tôi không phải chỉnh sửa tệp di chuyển sau khi được tạo để chỉ định giá trị mặc định.
kxhitiz


9

Có, tôi không thể biết cách sử dụng 'mặc định' trong lệnh trình tạo di chuyển nhưng có thể chỉ định giá trị mặc định cho cột chuỗi mới như sau bằng cách sửa đổi tệp di chuyển đã tạo trước khi áp dụng "rake db: migrate":

class AddColumnToWidgets < ActiveRecord::Migration
  def change
    add_column :widgets, :colour, :string, default: 'red'
  end
end

Thao tác này thêm cột mới có tên là 'màu' vào mô hình 'Tiện ích con' của tôi và đặt 'màu' mặc định của các tiện ích con mới thành 'đỏ'.


(Đây là trong Rails 4.2.)
MSC

4

Tôi đã thử t.boolean: active,: default => 1 trong tệp di chuyển để tạo toàn bộ bảng. Sau khi chạy quá trình di chuyển đó khi tôi đăng ký vào db, nó được thực hiện là null. Mặc dù tôi đã nói với mặc định là "1". Sau đó, tôi đã thay đổi một chút tệp di chuyển như thế này, sau đó nó hoạt động đối với tôi để đặt giá trị mặc định khi tạo tệp di chuyển bảng.

t.boolean: active,: null => false,: default => 1. Đã làm cho tôi.

Phiên bản khung Rails của tôi là 4.0.0


:default => false?
Christopher Oezbek,

2

Trước tiên, bạn sẽ phải tạo quá trình di chuyển của mình cho các khái niệm cơ bản về mô hình, sau đó bạn tạo một lần di chuyển khác để sửa đổi lần di chuyển trước của mình bằng cách sử dụng change_column ...

def change
    change_column :widgets, :colour, :string, default: 'red'
end
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.