2012-01-15 15 views
1

私は、このrailscastに記載されている行に沿って条件付きバリデーションを使用する予定です。railscastでは古いものですが、attr_accessorが使用されます(ビデオの後半部分はスキップしてください)。私はレールプログラミングには比較的新しいので、attr_accessorが何をしているのかを知りたいと思っていました。このpostはそれを使うことを尋ねています。そして、最もアップアップされた答えは、それらがほとんどレールで使われるべきではないと言います。attr_accessorを使用する必要がありますか?

railscastのようにattr_accessorを使用する必要がありますか?あるいは、これらのメソッドは自動的に作成されますか?この場合、attr_accessorを使用する上で危険はありますか?

+1

「attr_accessor」フィールドは、リンクされた回答で指摘されているように、データベース*と直接関係していません。これは、インスタンス変数にゲッター/セッターを作成するための単なるショートカットです。つまり、モデルの他の*トランジェント*ビット(DBによってサポートされていない)です。 (インスタンス変数はRubyのインスタンスの外部からは簡単には設定できません) –

+0

リンクされたポストは、この一時的な性質は通常は永続的ではなく、したがってモデルオブジェクトに属さない。しかし、これは 'attr_accessor'が何をしているのか混乱しているような質問には答えません。 –

+0

リンク先の記事では、@Peterは"データベースの自動アクセサーが作成されています。彼はあなたがデータベースに保存されている属性を作成するときにそれを意味しますか?アクセサーが自動的に作成されますか?私は少し混乱していた。 – John

答えて

4

使用attr_accessorはアクティブレコードとは関係ありません。私は、それがARにも関連するthis postでどのように動作するかを議論します。

は今、は何AR をするのか、それが自動的に作成され、データベース・モデルに基づいて「アクセサ」方法(例えばx/x=)自身です。これらの自動的に作成されたメソッドは、実際には内部ARの動作にプロキシするために使用するスタブです。

ポイントは、attr_accessor(自動)は単純なインスタンス変数アクセスをラップし、AR(自動)作成メソッドはARマジックをラップします。 2つの操作は互いに排他的です。 attr_accessorはARマジックに「リンク」しないため、永続化されない一時フィールドを作成するためにすべて使用できます.ARはインスタンス変数を知らない、または気にしません。

「危険」とは、過渡的な情報を持つモデルオブジェクトを複雑にしている可能性があります。一時的な場合、はモデルオブジェクトの一部であるべきですか?これは、リンクされた質問の中で最も多く投票された回答がする議論です。

ハッピーコーディング。


しかし、私はノーARモデルであることを起こるものと同じフィールドにattr_accessorを使用した場合に何が起こるか知っています...混乱少なくとも。

関連する問題