【问题标题】:Rails: Displaying Postgres Data in viewsRails:在视图中显示 Postgres 数据
【发布时间】:2015-04-27 00:38:11
【问题描述】:

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

感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails ruby postgresql


    【解决方案1】:

    两者有很大区别:

    <% post.title %>
    

    <%= post.title %>
    

    前者,只是运行 ruby​​ 代码。后者运行 ruby​​ 代码,然后将结果输出到屏幕上。如果要显示帖子标题,则需要带有= 的标题

    【讨论】:

    • 知道这一点很有帮助。
    【解决方案2】:

    您应该在控制器中获取文章:

    def index
      @articles = Article.order('created_at DESC').limit(5)
    end
    

    limit(5) 是您想要的魔法:将结果集限制为仅前 5 个对象。

    Taryn 说得对,您需要使用 &lt;%= 而不是 &lt;% 来输出值。

    【讨论】:

    • 当使用控制器中的变量时,它们总是这样传递到视图中吗?
    • 仅当您在它们前面加上@ 命名它们时
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-20
      • 2020-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      • 2017-10-10
      • 2013-04-07
      相关资源
      最近更新 更多