次のように、単一のオブジェクトにパーシャルを使用しています。
#/app/views/people/_person.html.haml
%div[person]
= image_tag person.image
%p.name= person.full_name
%p.location= person.location
...そのため、render
次のようにオブジェクトのグループにメソッドを使用できます。
#/app/views/people/index.html.haml
%ul.people
- @people.each do |person|
%li= render person
しかし、オブジェクトを 2 回以上レンダリングすると、同じ ID を持つ 2 つの要素が取得されます。これは、検証のためだけであれば、あまり良くありません。上記の単一のオブジェクトを部分的に保持し、後でrenderを呼び出すときに、IDまたは何かをプレフィックスとしてIDを一意に保つように指示する方法はありますか?
例を見てみましょう。たとえば、私は一種の Facebook クローンを持っています。サイドバーにはあなたが興味を持ちそうな人のリストがあり、メイン エリアにはすべての友達のリストがあり (私は現在人のインデックス ビューにいます)、ヘッダーには最近試した人のリストがあります。私に連絡する。これら 3 つのセットは同じ人物を共有している可能性があるため、同じ ID を持つ複数の要素を取得します。person_654
Haml がブラケット表記で行うように、すべての id を与える代わりに、サイドバーの人物に id interesting_person_654
、ヘッダーの人物に id lately_calling_person_654
、メイン エリアの人物 (現在のビュー) id person_654
.
どうすればいいですか?
名前空間にいくつかのオプションを使用することを考えましたが、render メソッドには 4 つのオプションしかなく、名前空間はそれらの 1 つではありません。ただし、render メソッドにモンキーパッチを適用しても問題ありません。むしろ、id プレフィックス ロジックでオブジェクト パーシャルを不明瞭にしたくありません (他のすべてのオブジェクト パーシャルにコピー アンド ペーストする必要さえありますが、まったく良くありません!)。