我的模型有一个名为ignored
的布尔字段。到目前为止我所做的不是通过default_scope where(:ignored => false)
将此字段设置为true的显示记录。
现在,在我的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")
所需的功能是:当我进入页面时,我想只列出那些列出了ignore = false并且未选中该框的页面。当我选中该框并提交我想要忽略的表格以及显示的未忽略的表格。这对Ransack来说可能吗?
答案 0 :(得分: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)