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>