2011-09-20 102 views
24

我得到的是这样的一个错误:carrierwave - 轨道3.1-未定义的方法: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' 

我在我的 “后” 的模式包括在此:

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

和_form .html.erb我说:

:html => { :multipart => true } 

我看着CarrierWave Error但是这并不能帮助我。

任何生成该错误的线索?我已经迁移数据库等等(后面的载波波导指南载波正好..)

+0

你能分享你的'posts_controller.rb'文件吗? –

+2

是否为图像添加了新的迁移文件?:) – anand

+1

manged修复它..已经作出了一个极端的新秀misstake。 Ty无论如何 – buren

回答

93

OP的意见,他解决了它,但没有答案集,所以我想我会添加一个人,在未来,其中包括我自己,直到我想通了:)

未定义的方法`x_will_change!'如果您忘记在模型的数据库表中添加列,则会发生#。如果你有一个模型,用户和AvatarUploader,与安装为在Carrierwave文档上传:

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

然后错误将读取

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

修复(基于这个例子中)加在迁移列运行在控制台以下:

rails g migration AddAvatarToUsers avatar:string 

,这将产生以下迁移:

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

然后迁移到(在控制台再次)申请更改:

rake db:migrate 
+3

不错1+忘了在这里添加图像列 – Francois

+2

切换分支并重置分支在其他分支,忘记迁移在这一个。谢谢! :) – Mosselman

+0

谢谢...我在我的数据库中拼写错误的头像:) – SimonKiteley

5

我想,作者只是忘了运行:

rake db:migrate 

另外,如果你遇到的内部这样的错误你的测试,然后你应该运行:

rake db:test:prepare 
3

此外,任何人在heroku上得到这个错误,你需要运行

heroku run rake db:migrate 

heroku restart 
在终端

之后加入/从数据库删除字段/表。

+1

保存了一天。谢谢! – beydogan

0

Kreek,这显然是一个小的疏忽,因为大多数人应该已经意识到,你可能是指运行此命令,如同一个人,控制台之外,否则,人们会得到如下:

'NameError:未定义的局部变量或方法'迁移'为main:Object'。

相关问题