0

表:

User

Project has_many Results

Project has_many Data through ProjectData

Results belongs_to data, project

Result表中,我有一列:positionint 类型。

所以我想results用 a得到所有的level < 50,实际上是 的值count

我正在考虑添加 Result 类

 def get_top_level current_user
   tsum = []
   Project.where(user_id: current_user).each do |project|
     tsum << project.results.where("level <= ?", 50).count
   end
   return sum(tsum)
 end

这会起作用,但我觉得应该有一种更简单、更漂亮的方法来做到这一点。

是否可以在视图中使用类名并传递不同的值,例如:

<%=Results.get_top_level(current_user)%>

或者

<%=@results.get_top_level(current_user)%>

如果这些都不是一个好的做法,你能帮我找到一个替代解决方案吗?

谢谢你。

4

1 回答 1

1

我会在项目模型上创建一个类似这样的方法。

def get_top_level
  self.results.select{ |result| result.level <= 50 }
end

在用户模型上。这里有什么关系,一个用户有很多项目吗?或者只是一个项目。

def get_top_level 
  self.top_level_projects.inject(:+)
end

def top_level_projects
  self.projects.map(&:get_top_level)
end

现在,当您调用 current_user.get_top_level 这将找到 top_level_projects,映射关联的结果并将它们全部添加在一起。

于 2013-11-12T19:19:08.820 回答