2012-02-02 22 views
41

Tôi đang sử dụng Rails 3.2 và có một sự chuyển đổi có chứa mã:Model.reset_column_information không tải lại các cột trong đường ray di cư

add_column :users, :gift_aid, :integer, :default => 2 
# reset columns 
User.reset_column_information 

... code here to load legacy data from sqlite3 database ... 

# now create a user with the loaded column data 
user = User.create(...other cols..., 
        :gift_aid => migrated_gift_aid_column_data, 
        ...other cols...) 

và tôi nhận được unknown attribute: gift_aid khi chạy di cư. User.column_names hiển thị cùng một danh sách trước và sau cuộc gọi đến reset_column_information.

Thật kỳ quặc khi tôi thả cột theo cách thủ công trong mysql và chạy lại di chuyển nó hoạt động như mong đợi. Bắt đầu từ lần di chuyển đầu tiên một lần nữa với một cơ sở dữ liệu rỗng và nó không hoạt động vì vậy nó là một cái gì đó để làm với chạy tất cả các di chuyển chứ không phải là duy nhất.

Tôi có một vài di chuyển trước đó trên Mô hình người dùng, cả hai bao gồm reset_column_information và cả hai đều hoạt động tốt.

Tôi thực sự gãi đầu của tôi về vấn đề này một - ai có bất kỳ ý tưởng

Trả lời

73

Tôi nghĩ rằng đây phải là một số loại lỗi liên quan đến bộ nhớ đệm schema ... điều này có thể làm việc:

User.connection.schema_cache.clear! 
User.reset_column_information 

(đối với Rails 3.2.2)

+1

Tôi nghĩ bạn có thể đúng. Tôi thực sự đã có hai cuộc gọi đến 'User.reset_column_information' trong hai lần di chuyển khác nhau và đó là lần thứ hai bị lỗi. Tôi đã sửa lỗi bằng cách sắp xếp lại các lần di chuyển của mình vì vậy tôi chỉ có một cuộc gọi đến 'reset_column_information' (vì tôi chưa triển khai trang web cuối cùng nên không có vấn đề gì xảy ra). Giải pháp này có vẻ như nó có thể làm việc quá. Tôi sẽ kiểm tra nếu tôi có cơ hội. – Iain

+1

Tôi có thể xác nhận điều này thực hiện công việc tốt. Dường như với di chuyển dài và nhiều thay đổi đối với mô hình, chỉ có 'reset_column_information' hoạt động đầu tiên. Xóa bộ nhớ cache lược đồ làm cho nó hoạt động tốt! Cảm ơn :) – Iain

+1

Cảm ơn bạn rất nhiều! Điều này đã khiến tôi bị badshit vì tài liệu của Rails ghi rõ một điều gì đó khác biệt -> http://guides.rubyonrails.org/migrations.html#using-models-in-your-migrations – hrdwdmrbl

Các vấn đề liên quan