Pivotal Tracker是我使用的项目管理工具。我使用Pivotal Tracker Ruby Gem来访问API。
我尝试使用分配给他们的点数创建每个成员的哈希值。
最终结果应该类似于:
{"Joe Jones"=>5, "Jane Smith"=>6, "John Doe"=>3}
我已经在@members
项目中创建了项目中每个成员的数组。
我编写了下面的代码来帮助我创建每个成员的哈希值,并给出他/她分配的相应数量的故事,但我真正需要的是每个分配到的故事的estimate
值的总和。他们(估计是给定故事的分值)。
#creates a hash of members to number of stories assigned.
for i in 0..@members.length-1
my_hash[@members[i]] = project.stories.all(:owned_by => @members[i], :current_state => ['started', 'unstarted']).length
end
所以,我想知道,对于每个成员,我可以总结每个故事的estimate
值owned_by
该特定成员。 注意:估算字段中的未估计故事为-1,不应包含在总和中。
任何有关如何修改上述循环以迭代每个故事并总结估计值(不包括减1)的帮助将非常感激。我有一种感觉,有一些不错的Ruby jujitsu来完成这件事!
project.stories.all(:owned_by => @members[i], :current_state => ['started', 'unstarted'])
返回的示例数据,以防人们想知道格式:
[#<PivotalTracker::Story:0x007f9d6b8 @id=314, @url="http://www.pivotaltracker.com/", @created_at=#<DateTime: 2012-06-18T20:23:42+00:00 ((2456097j,73422s,0n),+0s,2299161j)>, @accepted_at=nil, @project_id=12345, @name="Test ", @description="This is the description for \"Test\"", @story_type="feature", @estimate=5, @current_state="unstarted", @requested_by="joe jones", @owned_by="joe jones", @labels=nil, @jira_id=nil, @jira_url=nil, @other_id=nil, @integration_id=nil, @deadline=nil, @attachments=[]>, #<PivotalTracker::Story:0x007f9d6b8 @id=315, @url="http://www.pivotaltracker.com/", @created_at=#<DateTime: 2012-06-18T20:25:20+00:00 ((2456097j,73520s,0n),+0s,2299161j)>, @accepted_at=nil, @project_id=12345, @name="Test 2", @description="This is the description for \"Test 2\"", @story_type="feature", @estimate=3, @current_state="unstarted", @requested_by="joe jones", @owned_by="joe jones"", @labels=nil, @jira_id=nil, @jira_url=nil, @other_id=nil, @integration_id=nil, @deadline=nil, @attachments=[]>, #<PivotalTracker::Story:0x007f9d6b8 @id=316, @url="http://www.pivotaltracker.com/story/", @created_at=#<DateTime: 2012-06-18T20:25:26+00:00 ((2456097j,73526s,0n),+0s,2299161j)>, @accepted_at=nil, @project_id=12345, @name="Test 3", @description="Description for Test 3 ", @story_type="feature", @estimate=-1, @current_state="started", @requested_by="joe jones", @owned_by="joe jones", @labels=nil, @jira_id=nil, @jira_url=nil, @other_id=nil, @integration_id=nil, @deadline=nil, @attachments=[]>]
P.S。关于如何使这个标题更具描述性的建议将非常感激。
答案 0 :(得分:1)
我认为这就是你要找的东西:
for i in 0..@members.length-1
my_hash[@members[i]] = project.stories.all(:owned_by => @members[i], :current_state => ['started', 'unstarted']).inject(0) do |sum, single_story|
single_story.estimate > 0 ? sum + single_story.estimate : sum
end
end
详细了解文档Enumerable#inject
答案 1 :(得分:0)
这里只是编码打高尔夫球,但这个片段也可以解决问题!
Hash[@members.collect {|member| Array(member, Project.storie_estimates_for(@member).inject(&:+))}]
我会在Project
模型中添加storie_estimates_for(成员)方法,该方法将为该成员的所有故事返回一组估计值(当然是非负的!)!
FWIW,for
循环被视为邪恶! http://blog.grayproductions.net/articles/the_evils_of_the_for_loop
此外,inject是一种使用累加器将数组缩减为单个对象的方法。如果你看一下inject
方法的形状:
ary.inject(initial) {|accumulator, element| do_something_with_accumulator_and_element }
返回累加器的最终值。