我有一个搜索表单,用于搜索名为property的地理编码模型。地理编码搜索工作正常。但是,当我向搜索引入更多参数时,它会返回不正确的结果。
我在属性模型上有两个布尔列,吸烟者和宠物。在我的URL中,我注意到两次插入了相同的宠物查询参数:
我使用的是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
端
答案 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})