【发布时间】:2015-06-14 04:07:47
【问题描述】:
在尝试创建此哈希 idea_benefit_count 时,我遇到了几个语法和 nil 问题。
@idea = @domain.ideas
@idea_evaluations = Array.new()
@idea.each do |idea|
@idea_evaluations << idea.evaluations
end
@idea_benefit = []
if !@idea_evaluations.nil?
@idea_evaluations.each do |eval|
@idea_benefit << eval.benefit
end
@idea_benefit_count = Hash.new(0)
@idea_benefit.flatten.each { |idea_benefit| @idea_benefit_count[idea_benefit] += 1 }
end
idea has_many domains,所以@idea 应该是具有给定@domain 的所有想法。
@idea_evaluations 是 belong_to 特定 idea 的所有评估的数组。
@idea_benefit 是一个数组数组,其中包含每个评估的所有 benefit 条目。示例输出:[["happier_customers"], ["happier_employees"], ["happier_employees", "decreased_costs"], ["happier_employees"]]
idea_benefit_count 读取idea_benefit 并计算一个想法有多少每种类型的好处。 idea_benefit_count基于上述idea_benefit数组的输出为{"happier_customers"=>1, "decreased_costs"=>1, "happier_employees"=>3}
(希望这个上下文涵盖所有内容)
我当前的错误是undefined method 'benefit' 在线@idea_benefit << eval.benefit。 Benefit 是evaluation 的一个属性,所以它应该输出类似["happier_customers"] 的东西。
我意识到这段代码有点乱,所以任何建议都会对让整个事情正常工作非常有帮助。一个大问题是检查是否有属于idea 的evaluations,因为如果它返回nil,则会引发错误。尝试使用 if !@idea_evaluations.nil? 检查解决该问题,但由于 undefined method 'benefit' 错误而无法对其进行测试。
编辑
@idea_evaluations = Array.new()
@idea.each do |idea|
@idea_evaluations << idea.evaluations
end
@idea_evaluations.flatten!
@idea_benefit = []
unless !@idea_evaluations.nil?
@idea_evaluations.each do |eval|
@idea_benefit << eval.benefit
end
@idea_benefit_count = Hash.new(0)
@idea_benefit.flatten.each { |idea_benefit| @idea_benefit_count[idea_benefit] += 1 }
end
【问题讨论】:
标签: ruby-on-rails arrays ruby loops ruby-on-rails-4