Rails 可以在一个查询中搜索多个列吗?
Can Rails search across multiple columns in one query?
我编写了一个简单的搜索功能,它只查找“名称”字段中的值。如果同时搜索更多的字段,如何重写?
<%= form_tag search_tasks_path, :method=> 'get' do %>
<p>
<%= text_field_tag :name, params[:name] %>
<%= submit_tag "Search" , :name=> nil %>
</p>
<% end %>
Rails 搜索可以找到多个列吗?
更新
我对Controller和View做了如下修改,导致搜索字段变成两个,搜索功能被禁用(只列出了完整数据)。
控制器
def list
@tasks = current_user.tasks.order(id: :desc)
end
def search
if @tasks = current_user.tasks.where('name=? OR note=?', params[:name], params[:note])
@tasks = current_user.tasks.order(id: :desc)
elsif params[:name].present? && params[:saf].blank?
@tasks = current_user.tasks.where('name=? and note=?', params[:name], params[:note])
else
@tasks = current_user.tasks.order(id: :desc)
end
end
查看
<div>
<%= form_tag search_tasks_path, :method=> 'get' do %>
<p>
<%= text_field_tag :name, params[:name] %>
<%= text_field_tag :note, params[:note] %>
<%= submit_tag "Search" , :name=> nil %>
</p>
<% end %>
</div>
我了解到您想跨表单中的多个字段进行搜索。
您需要在要搜索的表单中添加另一个字段,并且必须在控制器操作中处理响应的结果。
@tasks = Task.where('name=? OR some_another_field=?', params[:name], params[:some_another_fields])
我没有正确理解你的问题。这似乎是您要实现的解决方案。
控制器:
def list
@tasks = current_user.tasks.order(id: :desc)
end
def search
if params[:search].present?
@tasks = current_user.tasks.where('name=? OR note=?', params[:search], params[:search]).order(id: :desc)
else
@tasks = current_user.tasks.order(id: :desc)
end
end
查看:
<div>
<%= form_tag search_tasks_path, :method=> 'get' do %>
<p>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search" , :name=> nil %>
</p>
<% end %>
</div>
我编写了一个简单的搜索功能,它只查找“名称”字段中的值。如果同时搜索更多的字段,如何重写?
<%= form_tag search_tasks_path, :method=> 'get' do %>
<p>
<%= text_field_tag :name, params[:name] %>
<%= submit_tag "Search" , :name=> nil %>
</p>
<% end %>
Rails 搜索可以找到多个列吗?
更新 我对Controller和View做了如下修改,导致搜索字段变成两个,搜索功能被禁用(只列出了完整数据)。
控制器
def list
@tasks = current_user.tasks.order(id: :desc)
end
def search
if @tasks = current_user.tasks.where('name=? OR note=?', params[:name], params[:note])
@tasks = current_user.tasks.order(id: :desc)
elsif params[:name].present? && params[:saf].blank?
@tasks = current_user.tasks.where('name=? and note=?', params[:name], params[:note])
else
@tasks = current_user.tasks.order(id: :desc)
end
end
查看
<div>
<%= form_tag search_tasks_path, :method=> 'get' do %>
<p>
<%= text_field_tag :name, params[:name] %>
<%= text_field_tag :note, params[:note] %>
<%= submit_tag "Search" , :name=> nil %>
</p>
<% end %>
</div>
我了解到您想跨表单中的多个字段进行搜索。 您需要在要搜索的表单中添加另一个字段,并且必须在控制器操作中处理响应的结果。
@tasks = Task.where('name=? OR some_another_field=?', params[:name], params[:some_another_fields])
我没有正确理解你的问题。这似乎是您要实现的解决方案。 控制器:
def list
@tasks = current_user.tasks.order(id: :desc)
end
def search
if params[:search].present?
@tasks = current_user.tasks.where('name=? OR note=?', params[:search], params[:search]).order(id: :desc)
else
@tasks = current_user.tasks.order(id: :desc)
end
end
查看:
<div>
<%= form_tag search_tasks_path, :method=> 'get' do %>
<p>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search" , :name=> nil %>
</p>
<% end %>
</div>