【问题标题】:Ruby on Rails - Get first n number of elements from array with conditionRuby on Rails - 从有条件的数组中获取前 n 个元素
【发布时间】:2021-12-15 09:12:03
【问题描述】:

在我的 Rails 视图模板中,@cmets 是一个哈希数组。我只需要显示满足此条件的前三个 cmets 。现在它正在显示所有这些。

 <tbody>
            <% @posts.each do |post| %>
                <tr>
                    <% @users.each do |user| %>
                            <% if post["userId"] === user["id"] %>
                                <td> <%= user["name"]  %></td>
                            <% end %>
                        <% end %>
                        <td><%= post["title"]  %></td>
                        <td><%= post["body"]  %></td>
                        <% comments_total = 0 %>
                        <% @comments.each do |comment| %>
                            <% if post["id"] === comment["postId"] %>
                                <td><%= comment["body"] %></td>
                                <% comments_total += 1 %>
                            <% end %>
                        <% end %>
                        <td><%= comments_total %></td>
                    <% end %>
                                
                </tr>
        </tbody>

【问题讨论】:

  • 您可能想要跟踪您渲染了多少,然后在三个之后停止。切线相关:在到达视图层之前完成大部分工作可能会更好;它将允许您仅获取实际需要显示的 cmets 数量和总数,使用快速 DB 查询而不是迭代 all cmets,此处似乎与帖子无关有问题。
  • 换句话说,Rails 给了你相当多的魔法——好好利用它。
  • 感谢您的回答。您将如何从不同的 API edpoint 获取数据并将它们关联起来?我正在获取三个不同的端点(用户、帖子、cmets),例如,我必须显示所有用户及其最后三个帖子和他们的 cmets。同样,拥有来自外部 API 的所有数据。我真的可以使用一些帮助知道如何。
  • 哦,那是另一回事——如果不了解 API,就无法知道。希望有一种机制不仅可以获取所有内容,也可以使用关系信息获取相关数据。

标签: ruby-on-rails ruby rubygems ruby-on-rails-5


【解决方案1】:

如果您只想显示与某个条件匹配的前 3 个 cmets,那么我会这样做:

<% matching_comments = @comments.select { |comment| comment["postId"] == post["id"] } %>
<% matching_comments.first(3).each do |comment| %>
  <td><%= comment["body"] %></td>
<% end %>
<td><%= matching_comments.size %></td>

您可以在控制器中加载带有条件的@cmets,以使视图更易于阅读。

【讨论】:

  • 感谢您的回答。您将如何从不同的 API edpoint 获取数据并将它们关联起来?我正在获取三个不同的端点(用户、帖子、cmets),例如,我必须显示所有用户及其最后三个帖子和他们的 cmets。同样,拥有来自外部 API 的所有数据。我真的可以使用一些帮助知道如何。
  • 这完全取决于 API 的构建方式。例如,API 可能只允许加载单个记录,或者它可能支持加载与外键列表匹配的记录,或者它甚至可能允许返回嵌套记录。如果没有 API 的公开文档,我们就无法为您提供帮助。
猜你喜欢
  • 2012-06-21
  • 2011-04-12
  • 2016-04-25
  • 1970-01-01
  • 1970-01-01
  • 2020-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多