Helpex - Trao đổi & giúp đỡ Đăng nhập
6

Tôi đang sử dụng Rails 3.0.5. Tôi đang sử dụng MySQL làm nơi lưu trữ cơ sở dữ liệu. Tôi có một mô hình trong đó một trong các cột cần phải là BIGINT. Tôi đang sử dụng phần sau trong tệp di chuyển tạo của mình:

t.column  :my_column_name,       :bigint

hoạt động tốt.

Tuy nhiên, khi tôi chạy

rake db: di cư

tệp 'schema.rb' được tạo sẽ tạo dòng sau cho cột cụ thể:

t.integer  "my_column_name",       :limit => 8

mà không đúng.

Câu hỏi của tôi là tôi đã sai ở đâu với điều đó? Có điều gì mà tôi nên làm để nhận được đúng tệp 'schema.rb' không? Tôi có thể thay đổi cách tạo tệp 'schema.rb' không?

Xin lưu ý rằng thực tế là tệp 'schema.rb' bị sai gây ra sự cố cho máy chủ tích hợp liên tục của tôi, máy chủ này chạy các thử nghiệm và tạo db từ đầu (trước khi chạy thử nghiệm) bằng cách sử dụng tệp 'schema.rb'.

6 hữu ích 0 bình luận 5.2k xem chia sẻ
9

Bây giờ tôi nhận ra rằng

t.integer "my_column_name", :limit => 8

với trình điều khiển my_sql là ĐÚNG trong tệp schema.rb.

Cơ sở dữ liệu được tạo bằng cách sử dụng tệp 'schema.rb' sẽ tạo ra một

bigint(20)

mặc dù điều này có vẻ lạ.

Tôi đã tìm thấy điều này bằng cách điều tra mã của bộ điều hợp my_sql, đoạn mã mà tôi trích dẫn ở đây:

 def type_to_sql(type, limit = nil, precision = nil, scale = nil)
       return super unless type.to_s == 'integer'
        case limit
        when 1; 'tinyint'
        when 2; 'smallint'
        when 3; 'mediumint'
        when nil, 4, 11; 'int(11)'  # compatibility with MySQL default
        when 5..8; 'bigint'
        else raise(ActiveRecordError, "No integer type has byte size #{limit}")
        end
      end

Rõ ràng là: limit => 8 sẽ tạo ra một bigint trong mysql db.

9 hữu ích 1 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ mysql ruby-on-rails bigint schema.rb , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading