かけるヒトからできるヒト

プログラムを書ける人からプログラムが出来る人へなるために個人的にまとめるブログ

railsでmodelに変更を加えたらNoMethodErrorが出るようになった

railsでアプリケーションを作っていたら、modelに他の変数が必要になったので追加したらNoMethodErrorが出るようになった。

初心者なので正しい手順じゃない可能性があるが、一応修正できたのでまとめ

 

問題

Userモデルに「screen_name」という変数を加えたかったので、一度Userを削除して

rails generate model user hogehoge:string fugafuga:string screen_name:string

として作りなおした。

その後、

rake db:migrate

でdbを作りなおしたが、userクラスのscreen_nameを使おうとするとNoMethodErrorに襲われた

 

解決

明らかに新しく追加した変数を使う時にエラーになっているので、db関連のエラーとあたりを付けて、そのへんのファイルをあさってみたら関係しているっぽいファイルを見つける。

schema.rb

ActiveRecord::Schema.define(:version => 20130808153613) do
     create_table "users", :force => true do |t|
         t.string "hogehoge"
         t.string  "fugafuga"
         t.datetime "created_at", :null => false
         t.datetime "updated_at", :null => false
     end
end

 

となっており、新しく作ったはずのscreen_nameという文字が見当たらない。

これがなんの時に作られるファイルなのか調べていたら、db生成時に自動的に作られるファイルらしいという事がわかる。

つまりdbを一度初期化してしまえばいいんじゃないか?ということで

 

rake db:migrate:reset

 

を実行してみたところ、scheme.rbのなかに変数が追加された事が確認された。

アプリケーションもばっちり動く。

 

結論

modelを作りなおしたら一度「rake db:migrate:reset」を行え