carrierwave - rails 3.1- undefined method:image_will_change

bur*_*ren 32 railscasts carrierwave ruby-on-rails-3.1

我收到一个看起来像这样的错误:

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'
Run Code Online (Sandbox Code Playgroud)

我把它包含在我的"帖子"模型中:

 attr_accessible :title, :name, :content, :post_image
 mount_uploader :post_image, PostImageUploader
Run Code Online (Sandbox Code Playgroud)

并在_form.html.erb我添加了:

 :html =>  { :multipart => true }
Run Code Online (Sandbox Code Playgroud)

我看了CarrierWave Error,但这对我没有帮助.

什么产生错误的线索?我已经迁移了数据库等等(紧跟载波的railscasts指南......)

kre*_*eek 118

OP评论他修复了它,但没有答案设置所以我想我会为将来遇到这个的人添加一个,其中包括我直到我想出来:)

未定义的方法`x_will_change!' 如果您忘记在模型的db表中添加列,则会发生#.如果你有一个模型User和一个AvatarUploader,那么在Carrierwave文档中安装上传器:

class User < ActiveRecord::Base
  mount_uploader :avatar, AvatarUploader
end
Run Code Online (Sandbox Code Playgroud)

然后错误将会读取

undefined method `avatar_will_change!' for #<User:0x00...>
Run Code Online (Sandbox Code Playgroud)

要修复它(基于此示例),请在迁移中添加一个列,在控制台中运行以下命令:

rails g migration AddAvatarToUsers avatar:string
Run Code Online (Sandbox Code Playgroud)

这将生成以下迁移:

class AddAvatarToUsers < ActiveRecord::Migration
  def change
    add_column :users, :avatar, :string
  end
end
Run Code Online (Sandbox Code Playgroud)

然后迁移以应用更改(再次在控制台中):

rake db:migrate
Run Code Online (Sandbox Code Playgroud)

  • 不错1+忘了在这里添加图片列了 (3认同)
  • 切换分支并在其他分支中重置db,忘记在此迁移.谢谢!:) (2认同)

Exi*_*iRe 6

我想作者只是忘了跑:

rake db:migrate
Run Code Online (Sandbox Code Playgroud)

另外,如果你在测试中遇到这样的错误,那么你应该运行:

rake db:test:prepare
Run Code Online (Sandbox Code Playgroud)


Are*_*rel 5

另外,对于在heroku上遇到此错误的任何人,您都需要运行

heroku run rake db:migrate
Run Code Online (Sandbox Code Playgroud)

heroku restart
Run Code Online (Sandbox Code Playgroud)

在从数据库中添加/删除字段/表后,在终端中单击。