我还是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查询,返回我想要的结果,使用简单的帮助程序显示。
答案 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
......这与前面的例子相同。