8

これは概念的な質問であり、私は SO で答えを見つけることができなかったので、ここに行きます:

コントローラーとビューを接続するためにインスタンス変数が使用されるのはなぜですか? 2 つの異なるクラス (コントローラーとビュー) の 2 つの異なるオブジェクトがありませんか。ビューがレンダリングされるとき、私たちは別のコンテキストにいますが、別のオブジェクトのインスタンス変数を使用していますか? これはどういうわけかカプセル化を破っていませんか?

Rails は、あるオブジェクトから別のオブジェクトへのマッチングをどのように行うのでしょうか? コントローラーのすべてのインスタンス変数をビューに複製しますか?

4

2 に答える 2

6

ある意味、カプセル化を破っていると言えます。注意しないと、Rails でビジネス ロジックとプレゼンテーション ロジックが簡単に混在してしまうことがわかりました。これは通常、ビュー テンプレートを作成しているときに開始され、コントローラーから渡していない値が必要であることを発見します。そこで私は戻って、コントローラーを微調整して、ビューで必要なものに合わせます。微調整を繰り返した後、コントローラ メソッドを確認すると、ビューを見て目的を確認しない限り、意味をなさないあらゆる種類のインスタンス変数が設定されています。そのため、コントローラとビューのどちらか一方を分離して理解するのではなく、どちらかを理解するために両方を見る必要がある状況に陥ります。

インスタンス変数を (トリックと一緒にBinding) 使用することは、(メソッドを定義するときのように) 事前にパラメーターを宣言する必要なく、コントローラーからビューに必要な値を渡すための単純な方法だと思います。宣言がないということは、記述するコードが少なくなり、リファクタリングや再編成を行うときに変更する必要が少なくなることを意味します。

于 2012-02-21T21:25:21.743 に答える
4

Rails はevalBindingを使用して、コントローラーのインスタンス変数をビューに渡します。Dave Thomas のこのプレゼンテーションを参照してください。これがどのように行われるかを説明する小さな例が 46 分にあります。

于 2012-02-21T21:07:41.450 に答える