我正在创建一个带有搜索功能的应用程序,我希望它的设置类似于Google或Twitter搜索,其中有一个在根URL上有搜索表单的登录页面,然后传递此表单中的数据通过查询字符串形成结果页面的URL(例如:www.domain.com/search?query=my+search+query)。
截至目前,我知道如何使用params散列从搜索中传递数据,但我想知道如何传递数据并使用查询字符串访问它。 < / p>
我最好的猜测是它是通过路由完成的,其中您在搜索操作的路由中包含以下内容:
:query => params[name_of_search_form_element]
然后使用params散列在控制器中访问此值,但我不确定这是否是最好的方法。有什么想法吗?谢谢!
答案 0 :(得分:3)
我建议使用以下步骤设置简单搜索。
在'routes.rb'文件中创建搜索路线。这允许您拦截所有对以{search'开头的路径的调用,如http://www.example.com/search。
map.search 'search', :controller => 'search', :action => 'search'
在视图中创建常规搜索表单,如下例所示。
您可以看到路由配置提供的辅助方法search_url
。该助手创建一个直接指向您的映射搜索页面的URL。您还应该注意:method => 'get'
调用,该调用会将所有发送参数显示为网址的一部分。此外,我们不希望在网址中发送搜索按钮的名称,因此我们设置了:name => nil
。我们还将在文本字段中显示当前搜索的术语。用户输入的搜索参数将在控制器中通过params[:search]
(搜索字段的名称)提供给我们。
<%- form_tag(search_url, {:method => 'get'}) do -%>
<%= text_field_tag(:search, params[:search]) >
<%= submit_tag('Search', :name => nil) >
<%- end -%>
现在我们可以设置搜索控制器了。
如您所见,如果找到搜索参数,我们将尝试按该名称查找用户。如果我们没有搜索参数,则所有用户都将显示在结果视图中。
class SearchController
def search
if params[:search].present?
@users = User.find(:all, :conditions => ['name LIKE ?', params[:search]]))
else
@users = User.find(:all)
end
end
end
您剩下的就是在'view / search /'下创建'search.html.erb'文件,并在@users变量中显示每个用户。
如果我没有忘记某些内容,您现在应该能够设置一个简单的搜索表单。祝你好运!
答案 1 :(得分:1)
使用超链接非常容易:
link_to "Page", :controller => :stuffs, :action => :index, :my_param => 'foo'
link_to "Page", @thing.merge({:my_param => 'foo'})
使用表单,我相信设置:method => :get
会起作用。请查看本页的第1.1节:http://guides.rubyonrails.org/form_helpers.html