渲染对象,将它们用作搜索链接

时间:2012-08-07 21:59:30

标签: ruby-on-rails search

我还是Rails的新手。我开始掌握它了,但我现在想要做的就是超越我。我已经做了很多研究,并且有很多关于制作搜索框的内容,但我希望简化这个过程。所以,我有一个视图助手来做到这一点:

<% if @events.any? %>
  <ol class="events">
    <%= render @events %>
  </ol>
<% end %>

工作正常,这显示了用户自己的事件。我得到一个事件对象列表,每个对象包含3行,:city:event_name:event_date。我想要做的是能够点击:city:city / :event_date行的对象,并显示搜索中查找具有该对象的所有事件的结果同一:city:event_date。 FWIW我正在使用下拉菜单获取事件对象的城市和日期,因此不会有用户输入差异。我想我需要继续自己渲染视图,比如

<% @events.each do |e| %>
    <%= link_to e.city, searchlinkthingie %>
<% end %>

以及相关的搜索控制器以获取结果并抛出新页面以及新路线。我还没有尝试构建控制器和路由,因为我无法弄清楚它需要的样子。我一直在阅读link_to,我认为我需要继续直接建立链接,但同样不确定它应该是什么样子。我准备把头伸进显示器了。想法?

编辑:受以下答案启发的解决方案是为城市和事件日期和link_to创建一个带有两个连接字符串的search_url(params[:search1 event.city, :search2 event.date]),在事件控制器中创建一个名为a的关联搜索方法事件模型中的self.search方法和routes.rb中的“匹配”。该模型使用AND执行SQL查询,返回我想要的结果,使用简单的帮助程序显示。

1 个答案:

答案 0 :(得分:1)

因此,您构建搜索,以便您可以进入任意城市并获得所需的结果。这是第一步。搜索控制器操作将接受作为搜索字符串的参数。假设该参数名为query

因此,您的search_controller类似于search的操作,该操作会使用params[:query]的值来返回结果。

一旦你有了这个,你就可以构建预定义搜索的链接,如下所示:

<%= link_to e.city, search_search_path(:query => e.city) %>

此链接会触发对search上的search_controller操作的请求(因此路径为search_search_path),并将query参数设置为e.city。< / p>

最后,由于此操作不适用于特定记录,因此它将是:collection而不是:member路由。因此,根据您的命名约定,routes.rb文件中的条目类似于:

config.resource :search do
  get :search, :on => :collection
end

这应该会产生一个类似于:

的网址
http://example.com/search/search?query=chicago

其中/search/search/映射到search控制器上的search操作,其中包含query参数。

您还可以输入匹配规则(此处显示的Rails 3样式),以进一步缩短该URL:

match "/search" => "search#search"

这将允许你有一个像:

的网址
http://example.com/search?query=chicago

......这与前面的例子相同。