2011-09-20 22 views
24

pojawia się błąd, który wygląda tak:carrierwave - Szyny 3.1- metoda niezdefiniowany: 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' 

podaję to w moim "post" Model:

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

oraz w _form .html.erb Dodałem:

:html => { :multipart => true } 

Spojrzałem CarrierWave Error jednak, że nie może mi pomóc.

Jakieś wskazówki, co generuje ten błąd? Migrowałem bazę danych i tak dalej (podążałem za przewodnikiem railscasts dokładnie pod adresem carrierwave).

+0

Czy możesz podzielić się swoim plikiem 'posts_controller.rb'? –

+2

dodałeś nowe pliki migracji obrazu?:) – anand

+1

udało się to naprawić .. popełniłem skrajny błąd debiutanta. Ty i tak – buren

Odpowiedz

93

PO komentuje, że to naprawił, jednak nie ma odpowiedzi, więc pomyślałem, że dodam jedną dla osób w przyszłości, która obejmowała mnie, dopóki jej nie rozgryzłem :)

Nieokreślona metoda "x_will_change!" dla # dzieje się, gdy zapomnisz dodać kolumnę do tabeli db modelu. Jeśli masz model użytkownika i AvatarUploader, z przesyłającym zamontowana jak w docs Carrierwave:

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

Wtedy błąd odczyta

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

Aby go naprawić (na podstawie tego przykładu) dodaj kolumna w migracji uruchom następujące polecenia w konsoli:

rails g migration AddAvatarToUsers avatar:string 

To wygeneruje następujący migracji:

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

Następnie migrują, aby zastosować zmianę (znów w konsoli):

rake db:migrate 
+3

miło 1+ zapomniałem dodać kolumnę obrazu tutaj również – Francois

+2

Przełączono gałęzie i zresetować db w innej gałęzi, zapomniałem przenieść w tym. Dzięki! :) – Mosselman

+0

Dzięki ... Napisałem awatara źle w mojej bazie danych :) – SimonKiteley

5

Przypuszczam, że autor po prostu zapomniał uruchomić:

rake db:migrate 

Ponadto, jeśli spełnione takiego błędu wewnątrz od twoje testy powinieneś uruchomić:

rake db:test:prepare 
3

Ponadto, dla każdego, kto ma ten błąd na heroku, musisz uruchomić

heroku run rake db:migrate 

i

heroku restart 

w terminalu po dodaniu/usunięciu Pola/tabele z bazy danych.

+1

zapisano dzień. Dziękuję Ci! – beydogan

0

Kreek, to oczywiście drobne przeoczenie, jak większość ludzi byłaby realizowana przez teraz, to prawdopodobnie oznaczało uruchomienie tego polecenia, jak trzeba, na zewnątrz konsoli, w przeciwnym razie można by uzyskać następujące:

'NameError: niezdefiniowana lokalna zmienna lub metoda `migrate' dla głównego: Object '.

Powiązane problemy