carrierwave - рельсы 3.1- неопределенный метод: image_will_change - PullRequest
32 голосов
/ 21 сентября 2011

Я получаю сообщение об ошибке, похожее на это:

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'

Я включил это в свою модель "post":

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

и в _form.html.erb Iдобавили:

 :html =>  { :multipart => true }

Я посмотрел Ошибка CarrierWave , но это мне не помогает.

Есть какие-нибудь подсказки, что вызывает эту ошибку?Я перенес базу данных и т. Д. (Точно следовал руководству Railscasts по несущей волне ..)

Ответы [ 5 ]

116 голосов
/ 16 мая 2012

ОП комментирует, что он это исправил, но ответа не было, поэтому я решил добавить его для людей, которые столкнутся с этим в будущем, включая и меня, пока я не выяснил это:)

неопределенный метод `x_will_change! ' for # происходит, если вы забыли добавить столбец в таблицу базы данных вашей модели. Если у вас есть модель User и 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
6 голосов
/ 25 сентября 2012

Полагаю, что автор просто забыл запустить:

rake db:migrate

Также, если вы встретили такую ​​ошибку в своих тестах, вы должны выполнить:

rake db:test:prepare
5 голосов
/ 29 июня 2013

Также, для любого, кто получает эту ошибку на heroku, вам нужно запустить

heroku run rake db:migrate

и

heroku restart

в терминале после добавления / удаления полей / таблиц из вашей базы данных.

0 голосов
/ 07 июля 2019

У меня была похожая проблема, но моя была потому, что я копировал и вставлял коды и забыл удалить

mount_uploader :picture, PictureUploader

из моей модели, которая не использовала изображения.Надеюсь, что это поможет другим в будущем, которые не могли понять, что случилось

0 голосов
/ 10 июля 2013

Крик, это, очевидно, незначительный недосмотр, поскольку большинство людей уже поняли бы, что вы, вероятно, намеревались запустить эту команду, как и следует, вне консоли, в противном случае можно получить следующее:

'NameError: неопределенная локальная переменная или метод `migrate' для main: Object '.

...