web-dev-qa-db-ja.com

carrierwave-Rails 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 を見ましたが、それは私を助けません。

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

33
buren

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

未定義のメソッド `x_will_change! 'モデルの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
117
kreek

著者は実行するのを忘れたと思います:

rake db:migrate

また、テスト内でこのようなエラーが発生した場合は、次のコマンドを実行する必要があります。

rake db:test:prepare
6
ExiRe

また、herokuでこのエラーが発生した場合は、実行する必要があります

heroku run rake db:migrate

そして

heroku restart

データベースからフィールド/テーブルを追加/削除した後のターミナル。

5
Arel

Kreek、これは明らかにマイナーな見落としです。ほとんどの人は今では気づいているでしょうが、おそらくコンソールの外でこのコマンドを実行するつもりでした。そうでなければ、次のようになります。

'NameError:undefined local variable or method `migrate' for main:Object '。

0
Adam

同様の問題がありましたが、コードをコピーして貼り付けていたため、削除するのを忘れていました。

mount_uploader :picture, PictureUploader

写真を使用していない私のモデルから。これが何が起こったのか理解できなかった将来の他の人を助けることを願っています

0
Holmes