Tôi đã có di chuyển add_column chạy tốt. Tuy nhiên, sau khi chạy nó và bắn lên một giao diện điều khiển, tôi sẽ tìm thấy các cột first_name và last_name hoàn toàn trống rỗng. Tôi đã thử sử dụng save!
thay vào đó và nó có cùng tác dụng - không có lỗi nào được báo cáo. Dưới đây là bản gốc:Rails 3.1: không thể ghi vào cột trong cùng một di chuyển thêm nó
class UserAddFirstNameAndLastName < ActiveRecord::Migration
def change
# add column first name, last name string
add_column :users, :first_name, :string
add_column :users, :last_name, :string
User.all.each do |u|
u.first_name = 'first name'
u.last_name = 'last name'
u.save
end
end
end
Tôi cũng nghĩ rằng đây có thể là một số vấn đề cấp tải, vì vậy tôi chèn dòng User
để buộc các lớp người sử dụng để tải lại trước khi vòng lặp. Không có con xúc xắc.
Khi tôi chia thành hai lần di chuyển, hiệu quả mong muốn đã đạt được. Có ai có một lời giải thích cho điều này? Tôi thề tôi thậm chí đã làm điều này trong cùng một dự án với quá khứ di cư.
Ghi chú khác: Thiết lập cho công cụ người dùng, thêm các cột mới vào attr_accessible
trong lớp Người dùng trước khi chạy di chuyển.
mu là quá ngắn có một câu trả lời tuyệt vời để giải thích những gì đang xảy ra và phải làm gì nhưng tôi cũng khuyên bạn nên chia hai thành các di chuyển khác nhau. Tạo cột trong một, điền vào một cột khác. Điều này ngăn chặn sự cố bạn đang gặp phải và khiến cho việc khôi phục ít xảy ra lỗi hơn. –