2015-08-20 38 views
0

我想通過可能的2個參數進行搜索,但都不需要存在。現在,如果沒有選擇任何東西,state_id將以「」的形式傳遞,而我不知道如何擺脫它。搜索潛在的多個參數

查看:

<div dropdown-toggle> 
<%= form_tag('/municipalities', method: :get) do %> 
<%= select_tag(options_for_select(@dropdown), {:allow_blank => "Please select"}, class: "btn btn-default btn-lg dropdown-toggle") %> 
    <%= submit_tag "Search", class: "btn btn-default" 
%> 
    <%= link_to "Reset", municipalities_path, class: "btn btn-default" %> 
    <%= button_tag 'Counties Only', name: "municipality_type", value: "County", class: "btn btn-default pull-right" %> 
<% end %> 
</div> 

控制器(我還是新的,所以這是不是乾淨,因爲它可以)

def index 

    @dropdown = State.all.map{ |s| [s.state, s.id]} 
    @municipality = Municipality.order(:name) 
    @count = @municipality.count 

    if !params[:state_id].to_s.blank? && params[:municipality_type].present? 
     @municipalities = Municipality.where(municipality_type: params[:municipality_type], state_id: params[:state_id]) 
     @forms = Form.where(municipality_id: @municipalities, state_id: @state) 
     if !params[:state_id].blank? 
      @present = params[:state_id] 
      @state = params[:state_id] 
      @state_name = State.find(@state) 
     end 
     @count_state = @municipalities.count 
    elsif params[:state_id].present? 
    @present = params[:state_id] 
    @state = params[:state_id] 
    @state_name = State.find(@state) 
    @municipalities = Municipality.where(state_id: @state) 
    @forms = Form.where(municipality_id: @municipalities) 
    @count_state = @municipalities.count 
    else 
    @forms = nil 
    @state = State.all 
    @municipalities = Municipality.order(:name) 
    end 
end 
+0

哪款車型是你想搜索? –

回答

0

如果我正確理解你的問題,你可以做您的條件分別爲if params[:state_id] && params[:municipality_type]elsif params[:state_id],如果在表單中提交,他們將通過條件。

+0

我的問題是如果沒有選擇狀態,它仍然會傳遞一個param [:state_id] =「」我需要它不傳遞任何信息,或者如果沒有選擇狀態,它就會傳遞nil,所以它只搜索縣。 – gwalshington

+0

對不起,我完全誤解了。我認爲你應該按照Ben的建議在下面做,因爲如果你想在下拉菜單中選擇一個空白選項並且它被選中,它總是會傳遞一個空字符串。 –

+0

另一種選擇是從表單中刪除button_tag並將其設置爲button_to,然後它不應該從表單中提交剩餘的參數,即state_id –

0

我會拍,我可能不會正確解釋你的意圖。你似乎正在定義許多你不需要的變量。

我相信這是所有你需要得到由兩個參數搜索直轄市,但讓他們爲空:

def index 
    @municipailies = Municipality.order(:name) 
    state_id = params[:state_id] 
    type = params[:municipality_type] 
    @municipalities = Municipality.where(state_id: state_id) if state_id 
    @municipalities = Municipality.where(municipality_type: type) if type 
end 
+0

感謝您的輸入!問題不在控制器中(我不認爲),它是在視圖中。我的問題是如果沒有選擇狀態,它仍然會傳遞一個參數[:state_id] =「」我需要它不傳遞任何數據,或者如果沒有選擇狀態,它將傳遞零,因此它只搜索縣。 – gwalshington

+0

好的,然後將if語句更改爲'if state_id.present?' –

+0

是的,我不認爲我正確地解釋自己。如果state_id.present?它的計算結果爲true,因爲state_id被傳遞爲「」。即使它不是一個數字,它仍然在評估現在的價值。 – gwalshington