我的书有很多book_versions(平装,精装,六包)。
在索引页面的初始加载时,它会加载此查询:
@search = Book.includes(:book_versions).search(params[:q])
当有人尝试排序时,我目前有这个查询:
@search = Book.includes(:book_versions).where( :book_versions => { :name => params[:book_version_name ] } ).search(params[:q])
问题在于,如果params[:book_version_name] = 'paperback'
它只发回book_versions,其中包含book_versions.name ='paperback'。这意味着其他结果都没有显示出来。相反,我希望它:
我将如何做到这一点?感谢。
答案 0 :(得分:0)
好像你总是想要所有的书,所以坚持你的第一个查询,然后在ruby中进行分组?
@result = Book.includes(:book_versions).search(params[:q])
@book_version_name = params[:book_version_name]
# in memory filtering of the result
@primary = @result.select { |x| x.book_version.name == @book_version_name }
@secondary = @result.select { |x| x.book_version.name != @book_version_name }
请参阅ruby select(不是rails数据库方法)http://ruby-doc.org/core-2.0.0/Enumerable.html#method-i-select
# the above could probably be written this way as well
@primary = @result.select { |x| x.book_version.name == @book_version_name }
@secondary = @result - @primary