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