2011-09-20 24 views
24

tôi nhận được một lỗi mà trông như thế này:carrierwave - ray 3.1- Phương pháp xác định: image_will_change

undefined method `post_image_will_change!' for #<Post:0xf4e9184> 
app/controllers/posts_controller.rb:43:in `new' 
app/controllers/posts_controller.rb:43:in `create' 

Tôi đã bao gồm trong này tôi mô hình "hậu":

attr_accessible :title, :name, :content, :post_image 
mount_uploader :post_image, PostImageUploader 

và trong _form .html.erb Tôi đã thêm:

:html => { :multipart => true } 

Tôi đã xem CarrierWave Error nhưng điều đó không giúp tôi.

Bất kỳ manh mối nào tạo ra lỗi đó? Tôi đã di chuyển cơ sở dữ liệu và vv (theo hướng dẫn railscasts trên carrierwave chính xác ..)

+0

bạn có thể chia sẻ tệp 'posts_controller.rb' của mình không? –

+2

u có thêm các tệp di chuyển mới cho hình ảnh không?:) – anand

+1

manged để sửa chữa nó .. đã thực hiện một cực kỳ tân binh misstake. Ty anyway – buren

Trả lời

93

OP ý kiến ​​rằng anh ta đã sửa nó, tuy nhiên không có câu trả lời nào nên tôi nghĩ tôi sẽ thêm một cho những người xem qua trong tương lai, bao gồm cả bản thân tôi cho đến khi tôi tìm ra nó :)

phương pháp chưa xác định `x_will_change! ' cho # xảy ra nếu bạn quên thêm một cột trong bảng db của mô hình của bạn. Nếu bạn có một mô hình người dùng và một AvatarUploader, với người tải lên gắn như trong các tài liệu Carrierwave:

class User < ActiveRecord::Base 
    mount_uploader :avatar, AvatarUploader 
end 

Sau đó, các lỗi sẽ đọc

undefined method `avatar_will_change!' for #<User:0x00...> 

Để khắc phục nó (dựa trên ví dụ này) thêm một cột vào cuộc di cư chạy sau trong giao diện điều khiển:

rails g migration AddAvatarToUsers avatar:string 

này sẽ tạo ra sự di cư sau:

class AddAvatarToUsers < ActiveRecord::Migration 
    def change 
    add_column :users, :avatar, :string 
    end 
end 

Sau đó chuyển sang áp dụng các thay đổi (một lần nữa trong giao diện điều khiển):

rake db:migrate 
+3

đẹp 1+ quên thêm cột hình ảnh ở đây là – Francois

+2

Chi nhánh đã chuyển và đặt lại db ở chi nhánh khác, quên di chuyển trong nhánh này. Cảm ơn! :) – Mosselman

+0

Cảm ơn ... Tôi đã viết sai avatar trong cơ sở dữ liệu của tôi :) – SimonKiteley

5

Tôi cho rằng tác giả chỉ quên để chạy:

rake db:migrate 

Ngoài ra, nếu bạn gặp lỗi như vậy bên trong thử nghiệm của bạn sau đó bạn nên chạy:

rake db:test:prepare 
3

Ngoài ra, đối với bất kỳ ai gặp lỗi này trên heroku, bạn cần chạy

heroku run rake db:migrate 

heroku restart 

tại nhà ga sau khi thêm/gỡ bỏ các lĩnh vực/bảng từ cơ sở dữ liệu của bạn.

+1

đã lưu trong ngày. Cảm ơn bạn! – beydogan

0

Kreek, đây rõ ràng là một sự giám sát nhỏ, như hầu hết mọi người sẽ nhận ra bây giờ, bạn có thể có nghĩa là để chạy lệnh này, là một trong nên, bên ngoài giao diện điều khiển, nếu không, người ta sẽ nhận được như sau:

'NameError: biến cục bộ không xác định hoặc phương thức `di chuyển' cho chính: Object '.

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