我的模型如下:
class Task < ApplicationRecord
belongs_to :project
belongs_to :urgency
end
class Project < ApplicationRecord
has_many :tasks, dependent: :destroy
end
class Urgency < ApplicationRecord
has_many :tasks
end
我正在尝试在表格中显示每个项目的任务数。例如,我要查看表格,显示项目A有10个任务,项目B有7个任务,等等。
此外,我只想显示每个项目中紧急度较高的任务数(这意味着从任务表中获取urgency_id并在“紧急度”表中查找urgency_name)。
答案 0 :(得分:0)
您应该看一下ActiveRecord提供的group方法。这是它生成的SQL的示例:
User.group(:name)
=>选择“用户”。*从“用户” GROUP BY名称中
此外,您还应该看看ActiveRecord提供的count方法。这是它生成的SQL的示例:
Task.count(:project_id)
从“任务”中选择COUNT(“ tasks”,“ project_id”)
我们可以将这两种方法结合在一起,以获得每个项目的任务数。
Task.group(:project_id).count(:project_id)
# This returns {1=>2, 2=>3} in my database. This suggests, project1 has 2 tasks, project2 has 3 tasks
要满足您的第二个要求,我们将需要使用rails joins方法。
Task.joins(:urgency).where("urgencies.utype = 'High'").group(:project_id).count(:project_id)
# This returns {2=>1}, suggesting project 2 has 1 task where the urgency (utype) is high.