如何从params哈希中删除空参数?

时间:2014-07-24 17:12:06

标签: ruby-on-rails ruby activerecord

在我的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=

感谢您的帮助。

3 个答案:

答案 0 :(得分:31)

将这个放在哈希之后:

.reject{|_, v| v.blank?}

答案 1 :(得分:8)

Rails 6.1 +

Rails 6.1在ActionController::Parameters中添加了compactcompact!,以便从nil哈希中删除params值。

params.compact

params.compact!

这里是link to PR


Rails 6.1在ActionController::Parameters中添加了compact_blankcompact_blank!,以便从blank哈希中删除params值。

params.compact_blank

params.compact_blank!

这里是link to PR

Examples of blank values:

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