Ich habe dieses Modell namens Post, idaelly Ich würde gerne nur ein Teil + ONE Layout verwenden, um das folgende zu erreichen.Schienen render sammlung in ul li
, wenn ein einzelnen Objekt-Rendering, Ausgänge:
%div= post.body
und beim Rendern eine Sammlung, Ausgänge:
%ul
%li= post.body
%li= post.body
%li= post.body
Zur Zeit habe ich einen Teil Beiträge/post.haml suchen, wie: %li= post.body
und wenn ich eine Sammlung rendere, würde ichtun Sein
Die Probleme:
- wann immer eine Sammlung machen, die ich für einzelnes Objekt zu setzen haben die Wiedergabe in% ul
- Die teilweise ohne% ul
nicht verwendbar ist zwar In 90% meiner Anwendungsfälle rendere ich eine Sammlung von Posts, es macht keinen Sinn, für einen Postteil nicht als eigenständige Vorlage verwendbar zu sein.
Ich dachte, ich so etwas wie
# view
render partial: 'post', collection: @posts, layout: 'list_of_posts'
# list_of_posts
%ul= yield
# posts/post
%li= post.body
würde mein erstes Problem, wenn es funktioniert, aber es funktioniert nicht dies tun könnte lösen. Offenbar nimmt render_collection nicht die Layout-Option, also ist es praktisch eine Sackgasse von dem, was ich beim Rendern der Sammlung finden kann. (Spacer_template könnte möglicherweise funktionieren, aber
</li><li>
als Abstandshalter ist in keiner Weise ein gutes Stück Code ..- haml dies nicht erlauben würde)
Was meine zweite Problem, ein einfacher Ausweg würde alles in divs rendern, aber ich bin wirklich ungern, wenn die Dinge in einer Liste sein sollten. Aber um es zum Laufen zu bringen, ist es wahrscheinlich die einzige clean-ish-Lösung. div.list-of-posts > div.post
statt ul.posts > li
Ich weiß, dass ich immer so etwas wie
# view - collection
%ul= render @posts, in_list: true
# view - object
= render @post
# posts/post.haml
- post_counter ||= false
- tag = post_counter ? :li : :div
= content_tag tag do
= post.body
aber in diesem Fall tun kann, ich brauche noch ein% ul zu setzen, wenn eine Sammlung übergeben wird.
Oder kann ich sonst noch tun etwas ähnliches, aber vielleicht ein kleines bisschen sauberer:
# view - collection of objects
= render 'posts', posts: @posts
# view - object
= render @post
# posts/posts.haml
%ul
= render post
# posts/post.haml
- post_counter ||= false
- tag = post_counter ? :li : :div
= content_tag tag do
= post.body
Dies ist die beste/sauberste Weg ich mit so weit kommen kann, irgendwelche Gedanken?
Dank. Leider, weil ich für jeden Beitrag nicht nur 'post.body' darstellen würde, wäre es ein großes chuck von divs und As und spannen, sie im Teil wiederholen zu lassen scheint unideal. Ich nehme an, ich kann '- wenn posts.is_a? Post = content_tag (: div) tu else = content_tag (: ul) do = content_tag (: li) tu, aber dann würde die Einrückung durcheinander gebracht werden, wenn ich den post.body html nicht in etwas anderes (sagen wir mal ein anderes Teil) packe. –