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

Tin*_*n81 12 ruby activerecord ruby-on-rails

在我的Rails 4应用程序中,我有这样的设置:

class InvoicesController < ApplicationController

  def index
    @invoices = current_user.invoices.search(params)
  end

  ...

end
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)

问题是我有一堆其他GET参数,它们都是params哈希的一部分.如何从URL中删除空白参数,以便我不会得到以下URL:

/invoices?after=&before=&maximum=&minimum=&number=
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

saw*_*awa 34

哈希之后放这个:

.reject{|_, v| v.blank?}
Run Code Online (Sandbox Code Playgroud)

  • 为了清楚起见:你究竟在哪里放置代码? (2认同)

Mar*_*n13 13

轨道 6.1+

Rails 6.1 添加compactcompact!以从散列中ActionController::Parameters删除nilparams

params.compact

params.compact!
Run Code Online (Sandbox Code Playgroud)

这是PR链接


Rails 6.1 添加compact_blankcompact_blank!以从散列中ActionController::Parameters删除blankparams

params.compact_blank

params.compact_blank!
Run Code Online (Sandbox Code Playgroud)

这是PR链接

blank值示例:

nil, '', ' ', [], {}, false
Run Code Online (Sandbox Code Playgroud)