Ruby on rails RubyonRails:搜索表单-多个搜索字段

Ruby on rails RubyonRails:搜索表单-多个搜索字段,ruby-on-rails,ruby,forms,search,textbox,Ruby On Rails,Ruby,Forms,Search,Textbox,我正在尝试创建一个允许用户搜索数据库的应用程序。搜索页面布局将使用一些下拉菜单,这些菜单将显示数据库中已有的数据,以缩小搜索范围,还可以使用文本框,允许用户输入诸如“项目名称”之类的关键字。我在让rails获取搜索表单中输入的所有信息并执行一次大型搜索时遇到问题 以下是我的搜索布局的一部分: <%= form_tag search_path, :method => 'get' do %> <%= hidden_field_tag :direction, params[:

我正在尝试创建一个允许用户搜索数据库的应用程序。搜索页面布局将使用一些下拉菜单,这些菜单将显示数据库中已有的数据,以缩小搜索范围,还可以使用文本框,允许用户输入诸如“项目名称”之类的关键字。我在让rails获取搜索表单中输入的所有信息并执行一次大型搜索时遇到问题

以下是我的搜索布局的一部分:

<%= form_tag search_path, :method => 'get' do %>

<%= hidden_field_tag :direction, params[:direction] %>
 <%= hidden_field_tag :sort, params[:sort] %>
<p>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search Project Name", :project_name => nil %>
</p>
<p>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search Client", :client => nil %>
</p>
<% end %> 
这是我的models/project.rb文件的一部分

def self.search(search)
if search
  where('project_name LIKE ?', "%#{search}%") || where('client LIKE ?', "%#{search}%")
else
  scoped
end
end
正如您所看到的,我只是试图搜索项目名称或客户。如果我能让它工作,我将把它扩展到其他领域

目前的功能是,当我尝试在两个框中搜索它时,它会覆盖一个框,并且只执行一个字段搜索

我是ROR的新手,希望有人能帮我。如有任何建议,将不胜感激


提前谢谢

我想提出一些你可能想做的事情。首先,在控制器中除了索引方法之外,还需要一个搜索方法,因为它们都呈现项目集合

首先,我要改变:

<%= form_tag search_path, :method => 'get' do %>
最后,修改索引的控制器操作,如下所示:

@projects = Project.search(params[:search]).all
实际上,您所做的是仅在存在术语时进行搜索,否则会链接范围

此问题已在另一个问题中解决:

根据您的问题,@Chris Wise假设您的
项目
表中有两列:
项目名称
客户

我可能错了,但我认为您实际上有两种模式,即客户机和项目,其中客户机有许多项目。如果是,则需要在每个模型中定义搜索:

客户机型号:

def self.search search_term
  return scoped unless search_term.present? 
  where(['client_name LIKE ?', "%#{search_term}%"]) #client_name means the column name, change it to the correct name.
end
项目模型:

def self.search search_term
  return scoped unless search_term.present? 
  where(['project_name LIKE ?', "%#{search_term}%"]) #project_name means the column name, change it to the correct name.
end
您的表格:

<%= form_tag projects_path, method: :get do %>
  <%= text_field_tag :project_name, params[:project_name] %>
  <%= text_field_tag :client, params[:client] %>
  <%= submit_tag "Search", name: nil %>
<% end %>

我希望它能帮上忙……

谢谢你回复我。它仍然不能解决我想要两个文本框的问题。因此,如果他们将项目名称放在一个框中,将客户机名称放在另一个框中,则应该将它们链接起来并在两个字段上搜索,但在搜索时,只有客户机框起作用。
def self.search search_term
  return scoped unless search_term.present? 
  where(['client_name LIKE ?', "%#{search_term}%"]) #client_name means the column name, change it to the correct name.
end
def self.search search_term
  return scoped unless search_term.present? 
  where(['project_name LIKE ?', "%#{search_term}%"]) #project_name means the column name, change it to the correct name.
end
<%= form_tag projects_path, method: :get do %>
  <%= text_field_tag :project_name, params[:project_name] %>
  <%= text_field_tag :client, params[:client] %>
  <%= submit_tag "Search", name: nil %>
<% end %>
#return all projects that match the search criteria
@project_search = Project.search(params[:project_name]).all
#return all clients that match the search criteria
@clients_search = Client.search(params[:client]).all