Ransack:return 提交表单且未输入搜索值时什么也没有
Ransack: return nothing when form submitted and no search values entered
我将搜索表单和搜索结果发布在同一页面上。
据我了解:搜查的默认设置是,如果提交的表单没有在搜索字段中输入任何值,则返回该特定资源的 所有 条记录。
我如何更改它,以便如果用户在搜索字段中未输入任何值的情况下进行搜索,则返回 none 条记录?
这行不通:
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"]
将始终存在,无论是否输入值。
您可以做的是拒绝任何空白值。
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
我将搜索表单和搜索结果发布在同一页面上。
据我了解:搜查的默认设置是,如果提交的表单没有在搜索字段中输入任何值,则返回该特定资源的 所有 条记录。
我如何更改它,以便如果用户在搜索字段中未输入任何值的情况下进行搜索,则返回 none 条记录?
这行不通:
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"]
将始终存在,无论是否输入值。
您可以做的是拒绝任何空白值。
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