2013-08-01 68 views
1

我使用的是ransack,我有一個與階段(草稿,編輯,完成等)有多對多關係的場地模型。關聯和拒絕的搜索搜索

這裏是我的形式

= search_form_for @q, url: search_admin_venues_path, html: {method: :post} do |f| 
    = f.label :name_cont 
    = f.text_field :name_cont 
    = f.select :stages_id_eq, Stage.all.collect{|c| [c.name, c.id]}, {include_blank: true} 

有沒有一種方法來搜索場地不屬於選定階段的一部分?即:以某種方式拒絕他們?

這裏是遍尋搜索我用

def search 
    @q = Venue.search(params[:q]) 
    @venues = @q.result(distinct: true)  
    render :index 
    end 

這是我用來做:

stage_obj = Stage.find_by_name(params[:stage]) 
@venues = Venue.all.includes(:stages).reject{|v| v.stages.include?(stage_obj)} 
+0

您現在正在使用拒絕方法,但是您想通過ransack重寫它? –

+1

你有沒有檢查'not_eq'謂詞 – Viren

回答

2

使用not_eq謂詞應該可以工作,正如Viren在註釋中注意到的那樣。

= f.select :stages_id_not_eq, Stage.all.collect{|c| [c.name, c.id]}, {include_blank: true} 

您還可以包括或使用多個選擇輸入和in/not_in謂詞排除多個值。

0

你看到的洗劫railscast視頻?

+0

是的,但它不能解釋如何拒絕來自搜索的查詢 – map7