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」を行え