通过Rails中的查询字符串传递表单中的数据

时间:2010-07-21 16:33:43

标签: ruby-on-rails forms routing query-string

我正在创建一个带有搜索功能的应用程序,我希望它的设置类似于Google或Twitter搜索,其中有一个在根URL上有搜索表单的登录页面,然后传递此表单中的数据通过查询字符串形成结果页面的URL(例如:www.domain.com/search?query=my+search+query)。

截至目前,我知道如何使用params散列从搜索中传递数据,但我想知道如何传递数据并使用查询字符串访问它。 < / p>

我最好的猜测是它是通过路由完成的,其中您在搜索操作的路由中包含以下内容:

:query => params[name_of_search_form_element]

然后使用params散列在控制器中访问此值,但我不确定这是否是最好的方法。有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:3)

我建议使用以下步骤设置简单搜索。

  1. 在'routes.rb'文件中创建搜索路线。这允许您拦截所有对以{search'开头的路径的调用,如http://www.example.com/search

    map.search 'search', :controller => 'search', :action => 'search'
  2. 在视图中创建常规搜索表单,如下例所示。

    您可以看到路由配置提供的辅助方法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 -%>
  3. 现在我们可以设置搜索控制器了。

    如您所见,如果找到搜索参数,我们将尝试按该名称查找用户。如果我们没有搜索参数,则所有用户都将显示在结果视图中。

    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
  4. 您剩下的就是在'view / search /'下创建'search.html.erb'文件,并在@users变量中显示每个用户。

  5. 如果我没有忘记某些内容,您现在应该能够设置一个简单的搜索表单。祝你好运!

答案 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