我有一个模型,它有一个名为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的页面,并取消选中该框。当我选中该框并提交我想要忽略的表单以及显示的未忽略表单时。兰萨克可能这样吗?
您可以使用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
您也可以使用未缩放的方法来清除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)