Was*_*per 3 ruby-on-rails ruby-on-rails-3.2
我想展示Posts哪belongs_to :categories一个接一个.
帖子控制器:
def index
@posts = posts.order('created_at DESC').all
end
Run Code Online (Sandbox Code Playgroud)
发布#index视图:
<% @posts.each do |post| %>
<article>
<h1><%= post.title %></h1>
<p><%= post.content %></p>
<span><%= post.category %><span>
</article>
<% end %>
Run Code Online (Sandbox Code Playgroud)
通过上面的示例,它将显示所有posts基于创建日期时间.
更新
如果我有两个类别,如burgers和sandwiches,我希望它首先显示一个汉堡邮政,然后一个三明治邮政,然后汉堡邮政然后三明治邮政.因此,它在两个类别之间交替,例如:
<article id="1">
<h1>Cheese Burger<h1>
<p>Content...</p>
<span>Burgers category<span>
</article>
<article id="2">
<h1>Ham Sandwich<h1>
<p>Content...</p>
<span>Sandwiches category<span>
</article>
<article id="3">
<h1>Chicken Burger<h1>
<p>Content...</p>
<span>Burgers category<span>
</article>
<article id="4">
<h1>Tomato Sandwich<h1>
<p>Content...</p>
<span>Sandwiches category<span>
</article>
Run Code Online (Sandbox Code Playgroud)
我不知道如何在SQL中做这样的事情,所以我将展示如何在Ruby代码中完成它.不幸的是,你需要做两个查询.一个拿汉堡,一个拿三明治.然后我们将使用Ruby在它们之间交替:
burgers = Post.joins(:category).where(:categories => { :name => 'Burgers' })
sandwiches = Post.joins(:category).where(:categories => { :name => 'Sandwiches' })
@posts = if burgers.size > sandwiches.size
burgers.zip(sandwiches)
else
sandwiches.zip(burgers)
end.flatten.compact
Run Code Online (Sandbox Code Playgroud)
此代码用于zip"编织" burgers并sandwiches进入一个数组.zip导致嵌套数组,因此我们将调用flatten结果使数组变平.最后我们compact用来摆脱nil数组中的任何值.
| 归档时间: |
|
| 查看次数: |
838 次 |
| 最近记录: |