2014-04-12 66 views
1

我有了所謂ignored一個布爾領域的典範。到目前爲止我所做的並不是顯示記錄,通過使用default_scope where(:ignored => false)將此字段設置爲true。洗劫eq_any布爾值

現在,在我的Ransack搜索表單中,我想要一個名爲Include ignored的複選框,以便表格還可以顯示被忽略的記錄以及不是的記錄。

我得到儘可能添加複選框,我的搜索形式f.check_box(:ignored_eq)但這種檢查時,列表僅顯示被忽略的記錄。如何在選中此框時顯示所有州的記錄?

控制器:

def index 
    @q = Venue.search(params[:q]) 
    @venues = @q.result.page(params[:page]).per_page(15) 
end 

搜索表單(HAML):

= search_form_for @q, url: [:admin, :venues] do |f| 
    = f.text_field :name_cont 
    = f.text_field :locality_name_cont 
    = f.text_field :categories_name_cont 
    = f.check_box :ignored_eq 
    = content_tag :button, type: :submit, class: 'btn' do 
    = content_tag(:i, "", class: "icon-search") 
    = t("helpers.links.search") 

所需的功能是:當我進入頁面後我想只有那些無視那些=虛假上市有框未選中。當我選中該框並提交我想要忽略的表單以及不被忽略的表單時。這可能與Ransack?

+0

可以嗎添加你的控制器代碼?添加了 –

+0

。以及所需的功能。 – janosrusiczki

回答

1

你可以做的是使用rewhere AR方法。

,並有類似的東西爲ignored標誌:

def index 
    @q = Venue.search(params[:q]) 
    @q = @q.rewhere("ignored = 0 OR ignored = 1") if params[:ignored_eq] == 1 
    @venues = @q.result.page(params[:page]).per_page(15) 
end 

,你也可以使用unscoped方法清除default_scope

def index 
    if params[:ignored_eq] == 1 
    @q = Venue.unscoped.search(params[:q]) 
    else 
    @q = Venue.search(params[:q]) 
    end 
    @venues = @q.result.page(params[:page]).per_page(15) 
end 

這是漂亮(IMO)

+0

不過,當我輸入不是所需行爲的頁面時,這將顯示所有記錄。我希望在進入頁面時只顯示不被忽略的記錄,並取消選中該複選框。一旦我檢查並提交表單,結果應該包括忽略和不被忽略的記錄。 – janosrusiczki

+1

@kitsched是的,我編輯了答案。但是你可以得到一般想法。 – xlembouras

+0

嘗試了兩個版本,當我檢查框時,它只返回被忽略的版本。搜索覆蓋'unscoped'和'rewhere'。 – janosrusiczki