在另一个关联类

时间:2017-10-08 16:36:15

标签: ruby-on-rails ruby

我有2个对象,UserGoalUser has_many :goalsGoal belongs_to :user

在我的Goal模型中,我有..

def total_goal_xp
  total_activities_sum = self.activities.sum(:quantity)
  return (total_activities_sum*xp_value)
end

在我的User show.html.erb文件中,我正在使用Google图表创建饼图并从我的Goal模型中提取数据。

<%= pie_chart @goals.group(:name).sum(&:total_goal_xp) %>

出于某种原因,我可以访问goal表中的部分,例如:name,但它不会让我从上面包含的Goal方法返回结果。

这是我的users_controller文件...

def show
  @goals = current_user.goals
  @activities = current_user.activities.reverse
end

更新:我现在已将s​​how.html.erb文件中的行更改为...

<%= pie_chart @goals.group(:name).sum(@goals.each.sum { |p| p.xp_value * p.activities.sum(:quantity) }) %>

现在它显示饼图,但不是按每个goal_id的单个总xp分解xp,而是简单地获取所有目标的总xp并将该值分配给每个goal_id。我有6个目标,当我将鼠标悬停在图表上时,每个目标有16.7%的图表和相同的值xp。

第二次更新:我已将饼图移动到名为dashboard.html.erb的文件中的目标视图文件夹中,并在目标控制器中创建了一个名为dashboard的方法。我已经将饼图的代码行改为......

<%= pie_chart @goals.group(:name).sum(@goals.each.sum { |p| p.total_goal_xp }) %>

这仍然给出了与上面一行完全相同的结果。它需要总价值并将其分配给每个目标,因此它们被平分。有谁知道我的总和有什么问题,为什么不计算每个目标的结果而不是所有目标?

第三次更新:我已将仪表板移回用户视图文件夹,并在我的用户控制器中创建了一个名为dashboard的方法。我已将仪表板中的代码行更改为...

<%= pie_chart @goals.group(:name).sum(@goals.sum.each { |p| p.total_goal_xp }) %>

基本上我已经切换了sumeach的顺序,但现在它给了我以下SQL错误消息......

SQLite3::SQLException: wrong number of arguments to function SUM(): SELECT SUM() FROM "goals" WHERE "goals"."user_id" = ?

第四次更新:我在总和之前添加了地图功能。这是新的代码行......

<%= pie_chart @goals.group(:name).map(&:total_goal_xp).sum(&:total_goal_xp) %>

这给了我以下错误..

undefined method `total_goal_xp' for 700:Fixnum

700是第一个目标的正确total_goal_xp值,所以我觉得我很接近,但我不知道还有什么可以尝试。我已经尝试了map()。总和,它仍然给了我no data。我已经尝试了没有总和,并返回一个空白。

第五次更新:我在.map()之后删除了.sum()并添加了find_by(:goal_id),它现在给了我一个错误的数组,并且每个正确的值都在其中。我怎样才能让它显示出来?

这是完整的错误消息..

undefined method `find_by' for [700, 500, 250, 2000, 500, 0]:Array
Did you mean?  find
               index_by
               find_all
               min_by

0 个答案:

没有答案