Ransack:提交表单时未返回任何内容且未输入任何搜索值

时间:2015-08-17 16:05:28

标签: ruby-on-rails ruby ransack

我将搜索表单和搜索结果发布在同一页面上。

据我所知:ransack的默认设置是,如果提交的表单没有输入到搜索字段中的值,则返回该特定资源的所有记录。

如何更改它,以便用户在搜索字段中没有输入任何值的搜索时,会返回的记录?

Ransack Documentation

这不起作用:

if params["q"].values.present? # Always returns true because an array of empty strings returns true from method call: present?
  # do this
else
  # do that
end

这两个都没有:

if params["q"].values.empty? # Always returns true because an array of empty strings returns true from method call: empty?
  # do this
else
  # do that
end

检查params["q"].present?不起作用,因为每次提交表单时,无论是否输入了值,这都是传递给服务器的内容:

# showing with pry
[1] pry> params[:q] 
  => {"namesearch_start"=>"",
      "city_cont"=>"",
     }
[2] pry> params[:q].present?
  => true # always returns true

因此,无论是否输入了值,params["q"]始终存在。

1 个答案:

答案 0 :(得分:1)

您可以做的是拒绝任何空白的值。

if params[:q].reject { |_, v| v.blank? }.any? # .none? for inverted
  # Handle search
else
  # Handle no query scenario
end

或者

if params[:q].values.reject(&:blank?).any? # .none? for inverted
  # Handle search
else
  # Handle no query scenario
end