rails aws ruby-on-rails-3.1 carrierwave railscasts

ruby on rails 3.1 - aws - carrierwave-rails 3.1- método indefinido: image_will_change



carrierwave aws (4)

Me sale un error que se parece a esto:

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''

He incluido esto en mi modelo "post":

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

y en _form.html.erb he añadido:

:html => { :multipart => true }

Miré el error de CarrierWave pero eso no me ayuda.

¿Alguna pista de qué genera ese error? He migrado la base de datos y demás (seguí la guía de Railscasts en carrierwave exactamente ...)


Además, para cualquier persona que reciba este error en heroku, debe ejecutar

heroku run rake db:migrate

y

heroku restart

en el terminal después de agregar / eliminar campos / tablas de su base de datos.


El OP comenta que lo solucionó, sin embargo, no hay un conjunto de respuestas, así que pensé en agregar una para las personas que se encontraran con esto en el futuro, lo que me incluyó hasta que lo descubrí :)

método indefinido `x_will_change! '' para # sucede si olvida agregar una columna en la tabla db de su modelo. Si tiene un usuario modelo y un cargador de avatar, con el cargador montado como en los documentos de Carrierwave:

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

Entonces el error leerá

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

Para solucionarlo (según este ejemplo), agregue una columna en una migración, ejecute lo siguiente en la consola:

rails g migration AddAvatarToUsers avatar:string

Esto generará la siguiente migración:

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

Luego migre para aplicar el cambio (nuevamente en la consola):

rake db:migrate


Kreek, esto es obviamente un descuido menor, como la mayoría de la gente ya se habría dado cuenta, probablemente quisieras ejecutar este comando, ya que uno debería, fuera de la consola, de lo contrario, obtendrías lo siguiente:

''NameError: variable local indefinida o método `migrate'' para main: Object ''.


Supongo que el autor se olvidó de correr:

rake db:migrate

Además, si cumplió con dicho error dentro de sus pruebas, debe ejecutar:

rake db:test:prepare