我正在我的大学上rails课程,我正在尝试创建一个搜索表单,它将在同一页面上显示结果,而不是显示不同的结果页面。这是一件简单的事情吗?我正在创建一个博物馆应用程序与每个博物馆的文物,但我希望用户从任何一个页面搜索文物。
在我的routes.rb上
resources :artifacts do
collection do
get 'search'
end
end在我的博物馆索引上,我有他给我们的下面的代码,但不确定如何调整同一页面的get路由。
<%= form_tag search_artifacts_path, :method => 'get' do %>
<p>
<%= text_field_tag :search_text, params[:search_text] %>
<%= submit_tag 'Search' %>
</p>
<% end %>
<% if @artifacts %>
<p> <%= @artifacts.length %> matching artifacts. </p>
<h2> Matching Artifacts </h2>
<% @artifacts.each do |a| %>
<%= link_to "#{a.name} (#{a.year})", a %><br />
<% end %>
<% end %>发布于 2012-02-29 05:17:26
是的,这很简单。如果存在params[:search_text],只需让索引页面返回搜索结果-这样您就不需要新的路由或不同的页面。
class ArtifactsController < ApplicationController
def index
@artifacts = Artifact.search(params[:search_text])
end
end
class Artifact < ActiveRecord::Base
def self.search(query)
if query
where('name ILIKE ?', "%#{query}%")
else
all
end
end
end那么你的表单看起来是这样的:
<%= form_tag artifacts_path, :method => 'get' do %>
<p>
<%= text_field_tag :search_text, params[:search_text] %>
<%= submit_tag 'Search' %>
</p>
<% end %>编辑:
因此,您真正想要做的是搜索任何页面,包括一个向同一页面发出请求的表单。
然后,在每个控制器方法中只需放入下面这行代码:
@artifacts = Artifact.search(params[:search_text])这将只用匹配搜索查询的工件填充@artifcats数组。
发布于 2016-05-12 17:54:21
尝试使用"Ransack“gem。它还可以执行一些更强大的搜索。
https://stackoverflow.com/questions/9489733
复制相似问题