34

我收到如下所示的错误:

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 错误,但这对我没有帮助。

关于产生该错误的任何线索?我已经迁移了数据库等等(完全按照载波上的 railscasts 指南..)

4

5 回答 5

129

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

未定义的方法“x_will_change!” for # 如果您忘记在模型的数据库表中添加一列,则会发生这种情况。如果您有一个模型用户和一个 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
于 2012-05-15T23:47:44.717 回答
6

我想作者只是忘了运行:

rake db:migrate

此外,如果您在测试中遇到此类错误,那么您应该运行:

rake db:test:prepare
于 2012-09-25T14:04:43.093 回答
5

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

heroku run rake db:migrate

heroku restart

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

于 2013-06-28T20:37:24.343 回答
0

Kreek,这显然是一个小小的疏忽,正如大多数人现在已经意识到的那样,您可能打算在控制台之外运行这个命令,否则,会得到以下结果:

'NameError: 未定义的局部变量或方法 `migrate' 用于 main:Object'。

于 2013-07-10T12:25:50.657 回答
0

我有类似的问题,但我的问题是因为我正在复制和粘贴代码而忘记删除

mount_uploader :picture, PictureUploader

来自我没有使用图片的模型。希望这对将来无法弄清楚发生了什么的其他人有所帮助

于 2019-07-07T11:21:37.193 回答