Rails:在视图中显示Postgres数据

时间:2015-04-27 00:38:11

标签: ruby-on-rails ruby postgresql

我无法在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(我这样做是为了学习学校项目)。

感谢您的帮助!

3 个答案:

答案 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 %>