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 エラーを見ましたが、役に立ちません。

そのエラーの原因の手がかりはありますか? データベースなどを移行しました(carrierwaveのrailscastsガイドに正確に従いました..)

4

5 に答える 5

129

OPは彼がそれを修正したとコメントしていますが、答えが設定されていないので、将来これに遭遇する人のために1つ追加すると思いました。

未定義のメソッド `x_will_change!' for # は、モデルの db テーブルに列を追加するのを忘れた場合に発生します。モデル 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
于 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' for main:Object'.

于 2013-07-10T12:25:50.657 に答える