2016-04-08 85 views
-2

我有一個搜索表單,用於搜索稱爲屬性的地理編碼模型。地理編碼搜索工作正常。但是,當我向搜索引入更多參數時,它會返回不正確的結果。Rails在URL中查詢參數兩次

我在屬性模型,吸菸者和寵物上有兩個布爾列。在我的網址我注意到,寵物同樣的查詢參數插入兩次:

http://localhost:3000/properties?utf8=%E2%9C%93&location=L17+6DD&distance=10&pets=false&pets=true&smokers=false&commit=Search

我使用Rails 4.2.6,2.3.0的Ruby和PostgreSQL

搜索表單:

<%= form_tag properties_path, method: :get do %> 
    <%= label :location, "Search properties near : " %> 
    <%= text_field_tag :location, params[:location] %> 

    <%= label :distance, "Distance : " %> 
    <%= text_field_tag :distance, params[:distance] %> 

    <%= label :pets, "Pets : " %> 
    <%=hidden_field_tag 'pets', false%> 
    <%=check_box_tag 'pets', true %> 
    <%= label :smokers, "Smokers : " %> 
    <%=hidden_field_tag 'smokers', false%> 
    <%=check_box_tag 'smokers', true %> 

    <%= submit_tag "Search" %> 
<% end %> 

屬性控制器動作:

def index 
if params[:location].present? 
    @properties = Property.near(params[:location], params[:distance] || 10) 
        .where("pets = :pets", {pets: params[:pets]}) 
        .where("smokers = :smokers", {smokers: params[:smokers]}) 

else 
    @properties = Property.all 
end 

+0

你需要刪除'<%= hidden_​​field_tag'pets',false%>' – Pavan

+0

我試過了,但是如果複選框沒有被選中正在發送一個空值而不是false,這打破了我的搜索。 – showFocus

+0

然後爲寵物e.t.c創建一個範圍。 'scope:pets, - >(pets){where(pets:pets)if pets.present? }'然後'Property.pets(params [:pets])' –

回答

3

刪除隱藏字段標籤:

<%=hidden_field_tag 'pets', false%> 
<%=hidden_field_tag 'smokers', false%> 

爲空值的問題用這個:

<%= check_box_tag 'pets', 'boolean_attribute', {}, 'true', 'false' %> 
<%= check_box_tag 'smokers', 'boolean_attribute', {}, 'true', 'false' %> 

或留下您的形式,因爲它是在控制器管理PARAMS,如:

@properties = Property.near(params[:location], params[:distance] || 10) 
        .where("pets = :pets", {pets: params[:pets] || false}) 
        .where("smokers = :smokers", {smokers: params[:smokers] || false}) 
+0

不,錯誤輸出:「錯誤的參數數量(給定5,預期1..4)」 – showFocus

+0

現在檢查答案... –