新手问题 Ransack 搜索词为空时返回所有数据

LinuxGit · 2016年08月13日 · 最后由 torvaldsdb 回复于 2017年04月10日 · 3080 次阅读
User.ransack(name_cont: '').result
  User Load (0.1ms)  SELECT "users".* FROM "users"

如题,ransack 搜索词为空时返回所有数据,求教,如何设置为返回空。

最直接的方式就是提前做一遍校验:

users = if params[:keyword].present?
  User.ransack(name_cont: params[:keyword]).result
else
  User.none
end

不确定 ransack 有没有针对空搜索词处理的方案,如果有的话,用它提供的,没有的话,就用我上面的。

(补充:看了下 StackOverflow 上的方案,基本也是自己手工先检查一遍 http://stackoverflow.com/a/22159567/2547108) (再补充: http://stackoverflow.com/questions/32054904/ransack-return-nothing-when-form-submitted-and-no-search-values-entered

难道不应该返回所有吗?

#1 楼 @martin91

def index
    @keyword = params[:q]
    @q = User.ransack(@keyword)
    @users = @q.result
  end
<% unless @keyword.nil? || @keyword.values.reject { |v| v.blank? }.empty? %>
  <%= render 'results' %>
<% end %>

多谢,暂时这样实现的。

@FrankFang 希望实现不输入搜索词提交时,首页不展现结果。

不过一般都还是搜索词为空时,直接返回所有。

不填任何数据搜索就是返回所有数据的吧😃 ,另外 ransack 还有一个问题,当搜索英文下划线的时候也是返回所有数据

martin91 回复

我也是想返回空数据,采用了你的这个推荐。不错.👍

需要 登录 后方可回复, 如果你还没有账号请 注册新账号