2010-12-29 3 views
2

@column_nameを使用してレコードの列値にアクセスできない理由が混乱しています。なぜインスタンス変数ではないのですか? activerecordはどのようにその価値を保持していますか?列名の前に「self」を付ける必要があるのはなぜですか。割り当てのために?ActiveRecord:なぜ自己。モデルの列の値にアクセスするために@の代わりに?

この謎を私に明確にしてくれてありがとう!

答えて

2

@ fooをミスタイプすると、なぜ@fooや@Fooを意味するときにコードが動作しないのかが分かりません。この方法は、あなたが、私が質問を読み違える

編集

をしたくなかった代わりに新しい変数を作るのタイプミスに「何のメソッドエラー」は存在しません。私はあなたがActiveRecordのソースの中にあることを意味すると思っていました。本当の理由はActiveRecordがほぼ完全に反映されて実装されているからです。データベースでcolumn_namesをチェックし、method_missingを介してこれらのフィールドのセッターとゲッターを動的に作成します。あなたがself.fieldを使った後に私が正しく思い出すと、それは@fieldを設定します。これは@attributes [:field]のようなどこかに隠されているかもしれません。