表:
User
Project has_many Results
Project has_many Data through ProjectData
Results belongs_to data, project
在Result
表中,我有一个类型为int的列:position
。
所以我希望results
的所有内容都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)%>
如果这些都不是一个好的做法,你能帮助我找到替代解决方案。
谢谢。
答案 0 :(得分: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,映射关联的结果并将它们全部添加在一起。