我无法在Rails中显示数据库中的信息。我能够在一个页面上显示每一行,但我不能将显示限制为仅5行数据。在我的代码中,Article是一个带有文本字段和标题字段的模型。我使用的是rails 4.1.8和Ruby 2.1.5。
我正在使用的代码:
<% posts = Article.all.order('created_at DESC'%>
<% posts.find_each(batch_size: 5) do |post| %>
<li>Title: <% post.title %></li>
<li>Date: <% post.created_at.strftime("%d %b. %Y") %></li>
<li>Body: <% post.text %></li>
<% end %>
我得到的输出是:
<li>Title: </li>
<li>Date: </li>
<li>Body: </li>
<li>Title: </li>
<li>Date: </li>
<li>Body: </li>
这里有两个集合的原因是因为我目前在数据库中只有两篇文章,至少表明这里正在访问数据库,但是使用post.title实际上并没有返回任何文本。
作为教程的一部分,我使用了以下代码:
<% @articles.each do |article| %>
<tr>
<td><%= article.title %></td>
<td><%= article.text %></td>
<td><%= article.created_at.strftime("%d %b. %Y") %></td>
<td><%= link_to 'Show', article_path(article) %></td>
<td><%= link_to 'Edit', edit_article_path(article) %></td>
<td><%= link_to 'Destroy', article_path(article),
method: :delete,
data: { confirm: 'Are you sure?' } %></td>
</tr>
这段代码正是我所期望的,但当然它会显示数据库中的每一行,这对于大量文章来说都是压倒性的。
希望这是一个非常简单的问题,我只是犯了一个明显的错误......这是我第一次使用Ruby或Rails(我这样做是为了学习学校项目)。
感谢您的帮助!
答案 0 :(得分:2)
之间存在很大差异:
<% post.title %>
和
<%= post.title %>
前者,只运行ruby代码。后者运行ruby代码,然后将结果输出到屏幕上。如果您希望显示帖子标题,则需要使用=
答案 1 :(得分:1)
您应该在控制器中提取文章:
def index
@articles = Article.order('created_at DESC').limit(5)
end
limit(5)
这就是你想要的魔法:将结果集限制为只有前5个对象。
Taryn是正确的,您需要使用<%=
而不是<%
来输出值。
答案 2 :(得分:-1)
find_each上的一些事情。 http://apidock.com/rails/ActiveRecord/Batches/ClassMethods/find_each 它将忽略任何订单操作。
我建议做以下更改:
<% Article.order('created_at DESC').limit(5).each do |post| %>
<li>Title: <% post.title %></li>
<li>Date: <% post.created_at.strftime("%d %b. %Y") %></li>
<li>Body: <% post.text %></li>
<% end %>