Ruby on rails 如何根据RESTAPI返回的对象内部的值对该对象进行分组?
我对ruby/rails还很陌生,所以请容忍我 我试图获取jirarestapi返回的结果,并在视图中呈现它们。我可以很容易地用宝石做到这一点。我遇到的问题是,在API返回的对象(在本例中是“issue”对象中的“components”字段对象)中,通过特定对象对结果进行分组。我曾尝试使用group_by和chunk来实现这一点,但我基本上得到了我想要的相反结果。两个方法返回相同的结果 在我的控制器中,我有:Ruby on rails 如何根据RESTAPI返回的对象内部的值对该对象进行分组?,ruby-on-rails,ruby,grouping,jira-rest-api,Ruby On Rails,Ruby,Grouping,Jira Rest Api,我对ruby/rails还很陌生,所以请容忍我 我试图获取jirarestapi返回的结果,并在视图中呈现它们。我可以很容易地用宝石做到这一点。我遇到的问题是,在API返回的对象(在本例中是“issue”对象中的“components”字段对象)中,通过特定对象对结果进行分组。我曾尝试使用group_by和chunk来实现这一点,但我基本上得到了我想要的相反结果。两个方法返回相同的结果 在我的控制器中,我有: @issues = @jira_client.Issue.all 我认为: <
@issues = @jira_client.Issue.all
我认为:
<% @issues.chunk {|issue_comp| issue_comp.fields["components"]}.each do |comps, issues| %>
<h2>
<% comps.each do |comp| %>
<%= comp["name"] %>
<% end %>
</h2>
<ul>
<% issues.each do |issue| %>
<li><p><%= link_to issue.key, "http://localhost:2990/jira/browse/#{issue.key}" %> - <%= issue.summary %></p></li>
<% end %>
</ul>
<% end %>
- -
我最终得到的是:
公司
- 伊塞亚
- 问题B
- 伊塞克
- 伊塞亚
- 伊塞克
- 伊塞亚
- 问题B
- 伊塞克
- 问题B
- 伊塞克
我看了一下你从吉拉那里得到的数据。在我看来是这样的:
- 还有一系列外部的Jira问题
- 每个问题都有一个“attrs”散列
- 每个“attrs”散列都包含组件
- 检查您是否可以向Jira索要该信息(这样您就不必自己生成),或者
- 构建您自己的数据结构(在内存中,在本地数据库中,根据您的喜好):
# in a controller, model, or service class (as you wish)
@components = {}
@jira_issues_array.each do |jira_issue| # from your API call
jira_issues[:components].each do |jira_component|
@components[jira_component[:key]] ||= { name: jira_component[:name], issue_keys: [] }
@components[jira_component[:key]][:issue_keys] << jira_issue[:key]
end
end
控制器、模型或服务类中的#(如您所愿)
@组件={}
@jira_issues|数组。每个do|jira_issues|35;都来自您的API调用
jira_问题[:组件]。每个do | jira_组件|
@组件[jira_组件[:键]]| |={名称:jira_组件[:名称],发布_键:[]]
@组件[jira_component[:key][:issue_key]我们需要样本输入和所需的输出。@Anthony我已经添加了样本输入。期望的输出已经存在,除非我遗漏了什么?基本上,我想根据视图中的组件名称对组件的所有常见问题进行分组。我在JSON查看器中查看了您的示例数据,但没有足够的数据来说明您遇到的问题。您是否可以将生成所需结果的数据包括在内,以便我们可以看到它的原始形式?当然,一定要混淆你的私人数据。@DanLaffan对不起,你是对的。我创建了一个完整转储的要点。我清理了它的私有数据,但实际上没有,因为它都在开发环境中。谢谢Dan!我只做了几次修改就把它放到了我的环境中,由于#的未定义方法“[]”,我的视图被破坏了。这就引出了一个问题,我应该将API的响应存储在数据库中吗?我原本认为这不是正确的做法,因为这似乎是不必要的一步。然而,考虑到对返回数据采取行动的复杂性,也许是这样?您的回答为我提供了足够的线索来构建解决方案。作为记录,我目前没有将其存储在我的数据库中,因此我必须调整我的解决方案,以便在某些情况下使用API提供给我的方法。谢谢你的帮助!很高兴能帮上忙!:)无论是在本地(在服务器上的数据库中)存储API源数据,还是每次都去获取这些数据,都是一个困难的问题。主要的挑战是知道您的数据库数据何时过期并被远程更新。
# some html.erb file:
<h1>Components and Issues</h1>
<ul>
<% @components.keys.each do |component_key, component| %>
<li><%= component[:name] %>
<ul> <!-- nested -->
<% component[:issue_keys].each do |issue_key| %>
<%= @jira_issues_array.find { |issue| issue[:key] == issue_key }[:name] %>
<% end %>
</ul>
</li>
<% end %>
</ul>