私は、ユーザーのためのサイドバーをレンダリングする部分的なレールを持っています。この部分の一部として、対応するグループの関連するモデルから計算されたスコアとともに、ユーザーのグループを表示する別の部分がレンダリングされます。その結果、私は以下の構造を持っている:Rails Partials:カプセル化された:ローカルまたはグローバル状態(@属性)を介してデータにアクセスしますか?
- view
-> renders sidebar
-> renders group_table
部分のサイドバーは、多くのビューに含まれている(例えばショー、編集、カスタムアクション)と私は属性を設定するには、すべてのこれらのアクションのための私のコントローラでbefore_filterを持っていますビューに渡す必要がある、たとえば
@groups = @user.groups
@group_ranking = [method with heavy calculations] # access via @group_ranking[group]
よりそれに何もしないいる(部分サイドバーを介して私はgroup_table部分的に@group_rankingsを渡す必要が、グローバル状態なしで上記と維持カプセル化され、自己完結型のパーシャルから構造を維持それを渡す)。サイドバーには別のデータが必要な部分データも含まれているため、(実際には@変数を渡しながらサイドバーをレンダリングするときにはコードの繰り返しがあります)がです。
最終的な質問は次のとおりです。カプセル化されたビューを強制することは可能ですか、より良い方法がありますか、または部分的に@variablesに直接アクセスすることは問題ありませんか?
ありがとうございました!
私は乾物の透明性を取引しないことに全く同意します - ありがとう! – emrass
透明性または乾燥性 - なぜ両方を持たないのですか?仕事をするために別のヘルパーを追加するだけです。ここではトレードオフは必要ありません。 – RocketR
この余分なロジックは機能しますが、DIY – apneadiving