Mã đầu tiên:Rails cơ sở dữ liệu giá trị boolean
create_table :users do |t|
...
t.boolean :is_active, :default => true
...
end
Bây giờ, đây là vấn đề của tôi - Tôi đang tạo ra một nhiệm vụ cào để nhập khẩu một số lượng lớn các hồ sơ (10.000). Tôi đã thực hiện thử nghiệm và đánh giá rộng rãi và xác định rằng cách nhanh nhất và hiệu quả nhất để thực hiện tác vụ này là tạo một câu lệnh SQL thô khổng lồ. (Tôi đang đọc dữ liệu từ CSV). Ví dụ:
inserts = Array.new
FasterCSV.foreach(...) do |row|
inserts.push "(row[0], row[1]...)"
end
User.connection.execute "INSERT INTO users (...) VALUES #{inserts.join(", ")}"
Mọi thứ đều tuyệt vời. Toàn bộ quá trình hoàn thành trong (nghĩa đen) giây thay vì 1,5 giờ sử dụng ActiveRecord. Tuy nhiên, vấn đề của tôi nằm ở trường boolean. Tôi phát triển cục bộ trên SQLite, nhưng MySQL về sản xuất. Khi sử dụng ActiveRecord, Rails xác định những gì cần đưa vào trường "boolean" (vì hầu như tất cả các cơ sở dữ liệu đều khác nhau). Tôi đang viết SQL tùy chỉnh và tôi muốn biết liệu có cách nào để tôi có thể làm điều gì đó như ...
INSERT INTO users(..., is_active, ...) VALUES (..., ActiveRecord::Base.connection.boolean.true, ...)
... trả về chính xác giá trị boolean cụ thể cho cơ sở dữ liệu.
Bất kỳ ai trả lời "chỉ sử dụng ActiveRecord" sẽ bị bỏ phiếu. Nó chỉ đơn giản là không khả thi trong tình huống này. Tôi cũng không sẵn sàng sử dụng một trường nhỏ xíu (1) và sử dụng trường số 1 hoặc số 0.
Tóm lại, giá trị cho is_active
cần phải thay đổi dựa trên các kết nối cơ sở dữ liệu hiện tại ...
Đây có phải là thậm chí có thể?
Tại sao bạn không phát triển cục bộ bằng MySQL? Điều đó sẽ giải quyết vấn đề này, cùng với những điều không tương thích khác. Cách họ thường đối phó với boolean là sử dụng một tuyên bố chuẩn bị, nhưng sẽ không làm việc cho bạn. –
Điều đó không trả lời câu hỏi của tôi. Nếu tôi muốn sử dụng POSTgres hoặc MSSQL tại một số thời điểm thì sao? – sethvargo