Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 通过协会查找记录_Ruby On Rails - Fatal编程技术网

Ruby on rails 通过协会查找记录

Ruby on rails 通过协会查找记录,ruby-on-rails,Ruby On Rails,我的第一个问题是,我不确定这是否可行。但既然我已经得到了很多帮助,我至少会自己问一些问题 我这里有一个“论文”模型,通过关系模型有很多“任务”,也有很多“检查任务”。现在我只想要那些任务数量等于检查任务数量的论文 class Thesis < ActiveRecord::Base has_many :tasks, :through => :relations has_many :checkedtasks end class Task < ActiveRecord::B

我的第一个问题是,我不确定这是否可行。但既然我已经得到了很多帮助,我至少会自己问一些问题

我这里有一个“论文”模型,通过关系模型有很多“任务”,也有很多“检查任务”。现在我只想要那些任务数量等于检查任务数量的论文

class Thesis < ActiveRecord::Base
  has_many :tasks, :through => :relations
  has_many :checkedtasks
end

class Task < ActiveRecord::Base
  belongs_to :relation
end

class CheckedTask < ActiveRecord::Base
  belongs_to :thesis
end
课堂论文:关系
有很多:检查任务吗
结束
类任务
我的第一个想法就是写一篇论文,其中(self.tasks.count==self.checked\u tasks.count)——但我不知道用什么代替self来让它工作

在那之后,我试着用示波器来做这件事,但这仍然给我留下了同样的问题


毕竟,我不确定是否有“rails方法”可以做到这一点——如果有,我会非常感谢您的帮助

a
CheckedTask
只是一个被标记为已完成的任务?如果是这样,我不知道你为什么需要一个单独的课程。一项任务就是一项任务,它要么完成要么不完成。在一个窗口中跟踪此状态

您应该能够使用
任务
模型上的
范围
来执行此操作,例如:

class Task < ActiveRecord::Base
  scope :checked, lambda { where(:complete => true) }

  ...
end
你可以

Thesis.joins(:checked_tasks, :tasks).group("thesis.id").select("thesis.*, count(distinct tasks.id) as task_count, count(distinct checked_tasks.id) as checked_count").having("checked_count = task_count")

但这是一个相当麻烦的查询。这确实让人觉得您应该按照一些评论者建议的思路重新设计数据模型,使用论文和任务之间的连接模型来存储论文任务的检查结果

CheckedTask
是一项被标记为已完成的任务吗?实际上,它背后还有一些东西。我只是觉得这样更容易理解。任务本身可以用于不同类型的论文。因此,任务不能只具有布尔标志,因为它们用于许多论文……那么
任务
检查任务
的目的是什么呢?它们在你的应用程序中代表什么概念?每一篇论文都有一系列的任务,在论文完成之前必须完成这些任务。此外,每一篇论文都有一个类型,定义了论文的任务。这个关联是在表关系中设置的。毕竟,在表任务中,我有论文id和关系id。这就是所有元素的组合方式。那么,您可以将布尔值添加到
关系
连接模型中吗?
:通过
的好处之一是可以在关系本身上添加属性。好的。我认为用这种方式选择它们比在数据模型中添加一个额外的布尔标志更好,但如果大家都说我用另一种方式选择它们,这也适用于我。无论如何,非常感谢你的帮助!所以我猜你们都在说,不可能访问where子句中的记录本身,就像我一开始就想做的那样?我发布的查询应该与您正在尝试的内容相同,只是有点粗糙
Thesis.joins(:checked_tasks, :tasks).group("thesis.id").select("thesis.*, count(distinct tasks.id) as task_count, count(distinct checked_tasks.id) as checked_count").having("checked_count = task_count")