我有称为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抓到别的东西(比如另一个部分)。 –