私はこの件に関していくつかの質問があり、this oneはそれを非常に詳しく説明していますが、受け入れられていないか、フォローアップされていません。Railsの新しいモデルフィールドが未定義のメソッドエラーを投げる
マイグレーションを使用してモデルに新しいフィールド 'is_ignored'を追加しました。フィールドは既にmysqlデータベースにあります。フィールドはschema.rbにリストされ、モデル定義でattr_accessibleとマークされていますが、値を割り当てようとすると未定義のメソッドエラーがスローされます。
ここで私は何をしているのですか。
移行(作品と予想されるようにフィールドを埋め):
def self.up
add_column :user, :is_ignored, :boolean
User.reset_column_information
User.find(:all).each do |p|
p.update_attribute :is_ignored, false
end
スキーマ(RMに "宣言に行く" に注意してください、それはフィールドの作業と同じように、ここで私を取る):
create_table "users", :force => true do |t|
...
t.datetime "updated_at"
t.boolean "is_ignored"
end
コントローラ:
params[:selected_users].each do |id|
@user = User.find(id)
@user.is_ignored = false #here is where the error is being thrown
@user.save
end
私はこれまでコントローラに投資していましたが、私が絶対にしなければならないならば、それは離れて、再足場を作る。私が見落とした可能性のあるモデルに新しいフィールドを手動で追加するには、いくつかのステップがありますか?
編集:私はまた、私は、このフィールドにアクセスして、レールのコンソールから値を設定して、コールが実行されたときに@userが私のコントローラではnilでないことを確認しました
。まだこの未定義メソッドエラーをスローします。
第二編集:
だから、これはかなりクールです。友人がこのメソッド呼び出しを次のように置き換えることを提案しました:
@user.update_attribute(:is_ignored, false)
私たちはうまくいくと思っていましたが、そうしなかったのです!以前と同じ定義されていないメソッドエラーが投げられました...
実際のエラーメッセージ/スタックトレースとは何ですか? –
また、正しい環境で移行してもよろしいですか? –
私は実際に以下の質問に答えました。デバッガは、私がdoブロックにパイプしていたidオブジェクトが、私がIDの配列として扱っていたハッシュの配列であることを明らかにしました... – BrMcMullin