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 还有一个问题,当搜索英文下划线的时候也是返回所有数据
我也是想返回空数据,采用了你的这个推荐。不错.