使用Rails 3.2限制关联查询中的结果量

时间:2015-05-14 22:10:41

标签: sql ruby-on-rails-3 activerecord

我有以下查询:

@books = Books.includes(:author, :pages)
              .find(:all,
                    :order => 'created_at DESC')

我们假设我的“页面”表格中包含“单词,图片”字段。对于空白页面,字段“words”为NULL。每本书有很多“页面”记录。

上述查询的问题在于它检索每本书的所有页面。我想只检索1页记录,例如“words”字段中的条件为“NOT NULL”。但是,我不想从查询结果中排除与页面查询不匹配的书籍(我的表中有10本书,我想要检索10本书。书籍.page关联应为“nil”为条件不符的书。)

我希望这是有道理的。

2 个答案:

答案 0 :(得分:0)

检查这个问题: Rails 3 - Eager loading with conditions

看起来像你想要的

int[] data = parseFile(file); start = data[0]; stop = data[1];

答案 1 :(得分:0)

如果您只想要返回一个空白页面,那么您可以添加一个关联:

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语法作为一个查询执行起来非常复杂,因此您要考虑是否要加载每本书的所有页面,然后每本书只使用一本。这是一个棘手的权衡。