2014-07-24 20 views
8

Trong Rails của tôi 4 ứng dụng tôi đã thiết lập này:Làm thế nào để loại bỏ các tham số trống từ tham số băm?

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 

Vấn đề là tôi có một loạt các thông số GET khác mà tất cả đều là một phần của params băm. Làm cách nào để tôi có thể xóa các thông số trống khỏi URL để tôi không kết thúc bằng các URL như:

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

Cảm ơn bạn đã trợ giúp.

+3

Để làm rõ, đang nói rằng khi bạn gửi biểu mẫu, bạn không muốn các lĩnh vực có sản phẩm nào được gửi qua URL? Nếu vậy, bạn có thể cần phải sử dụng JS để chặn biểu mẫu và xóa các mục trống trước khi gửi. –

Trả lời

22

Đặt này sau khi băm:

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

Chỉ cần cho rõ ràng: Trường hợp chính xác bạn sẽ đặt mã đó? – Tintin81

+0

@ Tintin81Sử dụng mã này ở bất kỳ nơi nào một cuộc gọi đến các tham số được thực hiện trong bộ điều khiển mà bạn muốn lọc. ví dụ. 'User.create (params [: user] .reject {| _, v | v.blank?})' Một cách sử dụng tốt hơn sẽ là bên trong mô hình của bạn, hoặc trên các bộ định cư hoặc như một phương thức gọi lại trước khi lưu. – scarver2

1

Đối với các hình thức tìm kiếm, tôi muốn loại bỏ params từ url trên các mặt hàng, đặc biệt là nếu có rất nhiều lĩnh vực trong tìm kiếm nâng cao. Đang thử một url sạch để đánh dấu và chia sẻ.

Đây là kịch bản cho cà phê này ...

$(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 
Các vấn đề liên quan