在我的Rails 4应用程序中,我有这样的设置:
class InvoicesController < ApplicationController
def index
@invoices = current_user.invoices.search(params)
end
...
end
class Invoice < ActiveRecord::Base
belongs_to :user
def self.search(params)
data = all
data = data.where("number LIKE ?", "%#{params[:number]}%") if params[:number]
data = data.where("total > ?", params[:minimum]) if params[:minimum]
data = data.where("total < ?", params[:maximum]) if params[:maximum]
data
end
...
end
问题是我有一堆其他GET参数,它们都是params
哈希的一部分。如何从网址中删除空白参数,以便我不会使用以下网址:
/invoices?after=&before=&maximum=&minimum=&number=
感谢您的帮助。
答案 0 :(得分:31)
将这个放在哈希之后:
.reject{|_, v| v.blank?}
答案 1 :(得分:8)
Rails 6.1在ActionController::Parameters
中添加了compact
和compact!
,以便从nil
哈希中删除params
值。
params.compact
params.compact!
这里是link to PR。
Rails 6.1在ActionController::Parameters
中添加了compact_blank
和compact_blank!
,以便从blank
哈希中删除params
值。
params.compact_blank
params.compact_blank!
这里是link to PR。
nil, '', ' ', [], {}, false
答案 2 :(得分:1)
对于搜索表单,我喜欢从客户端的url中删除params,特别是如果高级搜索中有很多字段。尝试使用干净的网址进行书签和共享。
这是咖啡脚本......
$(document).on 'ready page:load', ->
$('#search_form').submit ->
$(this).find(':input').filter(->
!@value
).prop 'disabled', true
true
# If they hit back
$('#search_form').find(':input').prop 'disabled', false
# If they stop page load and click on the form again it enables
$('#search_form').on 'click', ->
$(this).find(':input').prop 'disabled', false
return