使用 Rails 限制关联查询的结果数量 3.2
Limit the amount of results in associated queries with Rails 3.2
我有以下查询:
@books = Books.includes(:author, :pages)
.find(:all,
:order => 'created_at DESC')
假设我的 "Pages" table 有字段 "words, pictures"。对于空白页,字段 "words" 为 NULL。每本书有很多 "Pages" 条记录。
上述查询的问题在于它检索了每本书的所有页面。我只想检索 1 页记录,例如 "words" 字段上的条件 "NOT NULL"。但是,我不想从查询结果中排除与页面查询不匹配的书籍(我的 table 中有 10 本书,我想检索 10 本书。book.page 关联条件不匹配的书应该是"nil"。)
我希望这是有道理的。
检查这个 SO 问题:
Rails 3 - Eager loading with conditions
看起来像你想要的
class Category
has_many :children, :class_name => "Category",
:foreign_key => "parent_id"
has_many :published_pages, :class_name => "Page",
:conditions => { :is_published => true }
end
如果您只想返回一个空白页,那么您可以添加一个关联:
has_one :first_blank_page, -> {merge(Page.blanks).limit(1)}, :class_name => "Page"
... page.rb 中的位置 ...
def blanks
where(:words => nil)
end
那么您可以:
@books = Books.includes(:author, :first_blank_page).order('created_at desc')
...然后阅读 first_blank_page 会非常有效。
不过,如果您急于加载,则不会使用该限制,因为这种 SQL 语法作为一个查询执行起来会非常复杂,因此您需要考虑是否想要急切加载每本书的所有页面,然后每本书只使用一个页面。这是一个棘手的权衡。
我有以下查询:
@books = Books.includes(:author, :pages)
.find(:all,
:order => 'created_at DESC')
假设我的 "Pages" table 有字段 "words, pictures"。对于空白页,字段 "words" 为 NULL。每本书有很多 "Pages" 条记录。
上述查询的问题在于它检索了每本书的所有页面。我只想检索 1 页记录,例如 "words" 字段上的条件 "NOT NULL"。但是,我不想从查询结果中排除与页面查询不匹配的书籍(我的 table 中有 10 本书,我想检索 10 本书。book.page 关联条件不匹配的书应该是"nil"。)
我希望这是有道理的。
检查这个 SO 问题: Rails 3 - Eager loading with conditions
看起来像你想要的
class Category
has_many :children, :class_name => "Category",
:foreign_key => "parent_id"
has_many :published_pages, :class_name => "Page",
:conditions => { :is_published => true }
end
如果您只想返回一个空白页,那么您可以添加一个关联:
has_one :first_blank_page, -> {merge(Page.blanks).limit(1)}, :class_name => "Page"
... page.rb 中的位置 ...
def blanks
where(:words => nil)
end
那么您可以:
@books = Books.includes(:author, :first_blank_page).order('created_at desc')
...然后阅读 first_blank_page 会非常有效。
不过,如果您急于加载,则不会使用该限制,因为这种 SQL 语法作为一个查询执行起来会非常复杂,因此您需要考虑是否想要急切加载每本书的所有页面,然后每本书只使用一个页面。这是一个棘手的权衡。