我有以下查询:
@books = Books.includes(:author, :pages)
.find(:all,
:order => 'created_at DESC')
我们假设我的“页面”表格中包含“单词,图片”字段。对于空白页面,字段“words”为NULL。每本书有很多“页面”记录。
上述查询的问题在于它检索每本书的所有页面。我想只检索1页记录,例如“words”字段中的条件为“NOT NULL”。但是,我不想从查询结果中排除与页面查询不匹配的书籍(我的表中有10本书,我想要检索10本书。书籍.page关联应为“nil”为条件不符的书。)
我希望这是有道理的。
答案 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语法作为一个查询执行起来非常复杂,因此您要考虑是否要加载每本书的所有页面,然后每本书只使用一本。这是一个棘手的权衡。