我的应用程序有数百种产品。我创建了一个简单的过滤搜索栏,它适用于单个参数,但我想添加多个参数并返回包含其中一个搜索参数的任何产品。
这是我的单个参数的工作代码;我会展示我尝试添加多个参数的内容,但我有点超出我的深度。
products_controller.rb
def index
@products = Product.all.order('LOWER(name)')
if params[:q]
@products = Product.where('name ILIKE ?', "%#{params[:q]}%").all.order('LOWER(name)')
end
end
_searchbar.html.erb
<div class="form-inline">
<%= form_tag(products_path, :method => "get", id: 'search-form', :html => {class: 'form'}) do %>
<div class="form-group">
<%= text_field_tag :q, params[:q], placeholder: 'Product Name', class: 'form-control' %>
</div>
<%= submit_tag 'Search', class: 'btn btn-primary' %>
<% end %>
</div>
答案 0 :(得分:0)
尝试以下方法:
signInWithRedirect
答案 1 :(得分:0)
我们应该知道背后的操作。 sql查询必须是这样的:
select * from products where name ilike '%name1%' or name ilike '%name2%';
根据你的代码:
select * from products where name ilike '%name1,name2%'
这是不正确的。
答案 2 :(得分:0)
您可以使用以下步骤执行此操作,例如,如果您需要使用输入字段,则表单如下所示
<div class="form-inline">
<%= form_tag(products_path, :method => "get", id: 'search-form', :html => {class: 'form'}) do %>
<div class="form-group">
<%= text_field_tag :x, params[:x], placeholder: 'Product Name1', class: 'form-control' %>
</div>
<div class="form-group">
<%= text_field_tag :y, params[:y], placeholder: 'Product Name2', class: 'form-control' %>
</div>
<div class="form-group">
<%= text_field_tag :z, params[:z], placeholder: 'Product Name3', class: 'form-control' %>
</div>
<%= submit_tag 'Search', class: 'btn btn-primary' %>
<% end %>
</div>
或者你需要这个过滤键在复选框中,然后表单看起来像这样
<%= form_tag(products_path, :method => "get", id: 'search-form', :html => {class: 'form'}) do %>
<%= check_box_tag("x[]", "x") %> Xname
<%= check_box_tag("y[]", "y") %> Yname
<%= check_box_tag("z[]", "z") %> Zname
<%= submit_tag 'Search', class: 'btn btn-primary' %>
<% end %>
现在更新控制器看起来像这样
if params[:x] || params[:y] || params[:z]
@products = Product.where('true')
@products = @products.where('name ILIKE ?', "%#{params[:x]}%") unless params[:x].blank?
@products = @products.where('name ILIKE ?', "%#{params[:y]}%") unless params[:y].blank?
@products = @products.where('name ILIKE ?', "%#{params[:z]}%") unless params[:z].blank?
@products = @products.order('LOWER(name)')
else
@products = Product.all.order('LOWER(name)')
end
希望有所帮助