2014-07-24 15 views
8

Nei miei Rails 4 applicazione Ho questa impostazione:Come rimuovere i parametri vuoti dall'hash params?

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 

Il problema è che ho un sacco di altri parametri GET che sono tutti parte del params hash. Come posso rimuovere i parametri vuoti dall'URL in modo che io non finisca con URL come:

/invoices?after=&before=&maximum=&minimum=&number= 

Grazie per qualsiasi aiuto.

+3

Per chiarire, stai dicendo che, quando si invia il modulo, non si desidera che i campi vuoti da presentare tramite l'URL? In tal caso, potrebbe essere necessario utilizzare JS per intercettare il modulo e rimuovere gli elementi vuoti prima di inviarlo. –

risposta

22

Mettere questo dopo l'hash:

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

Solo per chiarezza: dove esattamente metteresti quel codice? – Tintin81

+0

@ Tintin81 Utilizzare questo codice ovunque venga effettuata una chiamata ai parametri nel controller che si desidera filtrare. per esempio. 'User.create (params [: user] .reject {| _, v | v.blank?})' Un uso ancora migliore sarebbe all'interno del tuo modello, sia sui setter che come metodo di callback prima del salvataggio. – scarver2

1

Per moduli di ricerca, mi piace per rimuovere parametri della URL sul lato client, soprattutto se ci sono un sacco di campi in una ricerca avanzata. Cercando un URL pulito per il bookmarking e la condivisione.

Ecco lo script caffè per questo ...

$(document).on 'ready page:load', -> 
    $('#search_form').submit -> 
    $(this).find(':input').filter(-> 
     [email protected] 
    ).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 
Problemi correlati