ruby-on-rails – 如何按列对Rails ActiveRecord结果进行分组?
发布时间:2020-12-17 03:39:38 所属栏目:百科 来源:网络整理
导读:我正在花一点时间跟踪应用程序并遇到了一个我不知道如何解决的问题.我有一个Task模型和一个Client模型.每个任务都属于一个客户端. class Task ActiveRecord::Base belongs_to :client attr_accessible :client_id,:description,:start,:end scope :yesterday
我正在花一点时间跟踪应用程序并遇到了一个我不知道如何解决的问题.我有一个Task模型和一个Client模型.每个任务都属于一个客户端.
class Task < ActiveRecord::Base belongs_to :client attr_accessible :client_id,:description,:start,:end scope :yesterday,-> { where('start > ?',Date.yesterday.to_time).where('start < ?',Date.today.to_time) } end class Client < ActiveRecord::Base attr_accessible :name has_many :tasks end 现在,我正在显示任务完成当天确定的任务列表,并在完成任务之前进行排序.我想显示相同的列表,但按客户端分组,并按客户端名称排序.这就是我想做的事情: <div id="yesterday_summary"> <% @yesterday_clients.each do |client| %> <h2><%= client.name %></h2> <ul> <% client.tasks.each do |task| %> <li><%= task.description %></li> <% end %> </ul> <% end %> </div> 在我的控制器中我目前有: @tasks_yesterday = Task.yesterday @yesterday_clients = group_tasks_by_client @tasks_yesterday 在group_tasks_by_client方法中,我有一些非常丑陋的代码,目前还没有工作: def group_tasks_by_client(tasks) clients = [] tasks.collect(&:client).each do |client| clients << {client.id => client} unless clients.has_key? client.id end clients_with_tasks = [] clients.each do |client| c = Struct.new(:name,:tasks) cl = c.new(client.name,[]) tasks.each do |task| cl.tasks << task if task.client_id = client.id end clients_with_tasks << cl end clients_with_tasks end 我确信有一个干净,简单的轨道方式来做到这一点,但我不知道如何.如何才能做到这一点? 解决方法
你可以让数据库为你这样做:
@yesterdays_clients = Client.includes(:tasks).merge(Task.yesterday).order(:name) 除了更清洁之外,它更高效,因为它可以一次性完成所有客户和任务.原始代码受N 1个查询限制,因为没有急切的加载. 顺便说一句,你可以让你的范围更简单: scope :yesterday,-> { where(:start => (Date.yesterday.to_time...Date.today.to_time)) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Flex中 encodeURI 对url进行编码,中文url
- 在Ruby中实现to_int和to_str的后果
- ruby-on-rails – 滚动表错误(user.add_role:admin Unknow
- sqlite3常用命令&语法
- postgresql – 无法获得postgres和kerberos(gss)一起工作
- ruby-on-rails – 来自root_url的简单link_to
- 使用最新的GCC进行iOS开发以获得c11功能是个好主意吗?
- Node.js配合node-http-proxy解决本地开发ajax跨域问题
- dojo Grid用法总结
- 有人在同一个项目中使用过Dojo和JQuery吗?