Rails在URL中查询param两次

时间:2016-04-08 10:40:16

标签: ruby-on-rails ruby-on-rails-4

我有一个搜索表单,用于搜索名为property的地理编码模型。地理编码搜索工作正常。但是,当我向搜索引入更多参数时,它会返回不正确的结果。

我在属性模型上有两个布尔列,吸烟者和宠物。在我的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,Ruby 2.3.0和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

1 个答案:

答案 0 :(得分: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' %>

或者保留你的表格,因为它在控制器中管理参数:

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