2013-12-17 80 views
0

我有has_many book_versions(平裝書,精裝版,sixpack)書籍。Rails + Ransack:首先按association.name ='string'排序,然後按字母順序排序其他所有內容

在索引頁面初始加載,它加載此查詢:

@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.name ='paperback'的book_versions。這意味着沒有其他結果顯示。相反,我希望它!

  1. 首秀與NAME = '平裝本'
  2. 顯示所有與NAME = '平裝本'

我將如何做到這一點的book_versions的book_versions?謝謝。

回答

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 } 

看到紅寶石選擇(未軌道數據庫法)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 
相關問題