2011-09-20 9 views
24

ottengo un errore che simile a questa:carrierwave - rotaie 3.1- metodo non definito: 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' 

ho inserito questo nel mio modello "post":

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

e in _form .html.erb ho aggiunto:

:html => { :multipart => true } 

ho guardato CarrierWave Error ma questo non mi aiuta.

Degli indizi di ciò che genera tale errore? Ho migrato il database e così via (ho seguito esattamente la guida di railscast su carrierwave ..)

+0

può si prega di condividere la vostra 'file di posts_controller.rb'? –

+2

ha u aggiungere i nuovi file di migrazione per un'immagine?:) – anand

+1

manged per aggiustarlo .. aveva fatto un missokock estremo. Ty comunque – buren

risposta

93

L'OP commenta che l'ha corretto, tuttavia non c'è risposta impostata così ho pensato di aggiungerne uno per le persone che si imbattono in questo in futuro, che ha incluso me stesso fino a quando ho capito :)

metodo non definito `x_will_change!' per # succede se ti dimentichi di aggiungere una colonna nella tabella db del tuo modello. Se si dispone di un modello di utente e di un'AvatarUploader, con l'uploader montato come nella documentazione Carrierwave:

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

Quindi l'errore leggerà

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

Per risolvere il problema (sulla base di questo esempio) aggiungere un colonna in una migrazione di eseguire il seguente nella console:

rails g migration AddAvatarToUsers avatar:string 

Questo genererà il seguente migrazione:

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

quindi migrare per applicare la modifica (di nuovo nella console):

rake db:migrate 
+3

1+ bello dimenticato di aggiungere colonna immagine anche qui – Francois

+2

rami commutati e resettare db in altro ramo, ho dimenticato di migrare in questo. Grazie! :) – Mosselman

+0

Grazie ... Ho scritto avatar sbagliato nel mio database :) – SimonKiteley

5

Suppongo che autore solo dimenticato di eseguire:

rake db:migrate 

Inoltre, se hai incontrato tale errore interno i tuoi test dovrebbero essere eseguiti:

rake db:test:prepare 
3

Inoltre, per chiunque ottenga questo errore su heroku, è necessario eseguire

heroku run rake db:migrate 

e

heroku restart 

nel terminal dopo l'aggiunta/rimozione di campi/le tabelle dal database.

+1

salvato il giorno. Grazie! – beydogan

0

Kreek, questa è ovviamente una svista minore, come la maggior parte delle persone avrebbero realizzato da questo punto, probabilmente significava per eseguire questo comando, come si deve, al di fuori della console, in caso contrario, si potrebbe ottenere il seguente:

'NameError: variabile locale non definita o metodo `migrate' per main: Object '.

Problemi correlati