我正在尝试查找列表中已完成的所有项目。我尝试在Todoitem
模型中进行查询,但它显示[#<Todoitem id: nil>]
我做错了什么?
我认为的查询是:
Todoitem.find_by_sql("SELECT count(*) AS count_all FROM todoitems ti INNER JOIN todolists tl WHERE (ti.completed = 'true' AND ti.todolist_id = tl.id)")
我的模特是这样的:
class Todolist < ApplicationRecord
belongs_to :user, required: false
has_many :todoitems, dependent: :destroy
end
class Todoitem < ApplicationRecord
belongs_to :todolist
end
答案 0 :(得分:0)
要查找Todolist中已完成的所有项目,您的查询将起作用。 (我假设您将完成的布尔值存储为字符串,因为您在原始查询中使用了字符串)
但是,由于您只选择count(*) AS count_all
,因此您必须从数组中的第一个元素中查看count_all,如下所示:
Todoitem.find_by_sql("SELECT count(*) AS count_all FROM todo....").first.count_all
这将在所有Todolist中返回一些已完成的todoitems。
更积极的记录方式是这样的:
Todolist.joins(:todoitems).where(todoitems:{completed:'true' }).count
要获取至少有一个已完成的待办事项的列表数量,您可以使用:
Todolist.joins(:todoitems).group(:id).where(todoitems:{completed:'true' }).length
要查找每个列表中已完成的项目数,您可以使用:
Todolist.joins(:todoitems).group(:id).where(todoitems:{completed:'true' }).count
这将返回一个散列,其中列表的id为键,已完成的项目数为值。
要获取特定任务中已完成项目的数量,您可以使用:
Todolist.joins(:todoitems).where(id: id, todoitems:{completed:'true' }).count
答案 1 :(得分:0)
你可以这样做。
Rails 5 - Postgresql
在此查询中,它仅显示todolist
的{{1}}。
todoitems
另一个,这将仅显示Todolist.select('todolists.id, todolists.title, count(todoitems.todolist_id) as total').joins(:todoitems).group("todolists.id")
没有todolist
结果的todoitems
。
0
我希望这对你有所帮助。