ruby on rails-Ransack eq_any用于布尔值



我有一个模型,它有一个名为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)

相关内容

  • 没有找到相关文章

最新更新