我有Project
和Entry
作为模型。条目有日期。
问题是,我现在只想显示该月的条目,按项目分组。如果我执行projects.each do |p|
,然后查询条目(p.entries
),则返回的条目是所有月份的条目,而不仅仅是我指定的月份。
虽然这是一个显而易见的结果,但在Rails中有没有一种方法可以简单地使用我原来的链式作用域返回该月的条目?
发布于 2012-10-04 19:51:15
has-many
关联也接受作用域,因此您可以使用projects.entries.your_scope
来过滤它们。缺点是,这将需要为每个项目另一个数据库查询,这可能会很慢,这取决于数据库的大小。
另一种不需要额外查询的方法是获取已过滤的条目,然后向上获取项目:
entries = Entry.my_conditions.includes(:project)
entries_by_project = entries.group_by(&:project)
现在您有了一个哈希表,它的键是项目,值只是符合条件的项目的条目。
发布于 2012-10-04 19:52:45
编辑:我确实误解了:)
第2步:您可以跨模型合并作用域。因此,如果您可以在Entry
上创建一个where
-type作用域来从给定月份中选择条目,那么您可以尝试类似这样的操作
Project.with_entries.on(param_the_month).merge(Entry.on(param_the_month))
我将其命名为on
,类似于您在Project
上的作用域-没有看到您的数据模型,我不能确切地说出如何实现它。
发布于 2012-10-04 19:51:34
您可以将includes添加到您的作用域中,这样它就不会再次查询这些记录,当您使用项目作用域时,它会立即加载这些记录。
scope :my_scope, includes(:entries).where( :active => true )
https://stackoverflow.com/questions/12734735
复制