我有稱爲Post的這個模型,idaelly我很樂意只使用ONE部分+ ONE佈局來實現以下功能。Ra ul在ul li中渲染集合
%div= post.body
和渲染的集合,當輸出:
%ul
%li= post.body
%li= post.body
%li= post.body
目前,我有一個部分職位/ post.haml看起來像渲染單個物體,輸出時
: %li= post.body
只要我正在渲染一個集合,我會做%ul=render @posts
個
的問題是:
- 每當渲染的集合,我必須把渲染,%UL
- 的部分不是單個對象可用而不%UL
雖然在90%的用例中,我呈現的是帖子的集合,但對於帖子部分不能用作獨立模板是沒有意義的。
我想我可以做類似
# view
render partial: 'post', collection: @posts, layout: 'list_of_posts'
# list_of_posts
%ul= yield
# posts/post
%li= post.body
這是否行得通會解決我的第一個問題,但事實並非如此。顯然render_collection不採用佈局選項,所以它實際上是我在渲染集合中找到的一個死路。 (Spacer_template可能工作,但
</li><li>
作爲隔離絕非一個好一段代碼..- HAML不會允許這)
至於我的第二問題,一個簡單的解決方法就是將所有東西都渲染到div中,但是當事情應該在列表中時,我真的不願意這樣做。但爲了使其工作起來,它可能是唯一的清潔解決方案。的div.list-of-posts > div.post
代替ul.posts > li
我知道我可以一直這樣做
# 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
但在這種情況下,我仍然需要投入每當收集傳遞一個UL%。
要不我可以做類似的,但也許一點點清潔的東西:
# 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
這一個是我能拿出迄今爲止最好的/乾淨的方式,有什麼想法?
感謝。不幸的是,因爲對於每一篇文章,我不會只是渲染'post.body',這將是divs和As的大挑戰,並且跨越,讓它們在部分中重複似乎是不合理的。 我想我可以做' - 如果posts.is_a? Post = content_tag(:div)do else = content_tag(:ul)do = content_tag(:li)做'但是然後縮進會被搞砸,除非我把post.body的html抓到別的東西(比如另一個部分)。 –