2012-04-13 19 views
0

在我search_field_tag SEARCH_PATH打电话时,我得到一个“无路由匹配”的错误。搜索表单位于我的标题中,这个想法仅仅是为了能够搜索事件。Rails 3的命名与路线的分段密钥“无路由匹配”搜索表单

这里是routes.rb中的路线:

match '/events/search/:query' => 'events#search', :as => "search" 

下面是搜索表单的代码。

<%= form_tag search_path, :method => :get do %> 
    <%= text_field_tag :query, params[:query] %> 
    <%= submit_tag "search", :name => :nil %> 
<% end %> 

(如何确保当我提交此表,这将提交/事件/搜索/:查询:查询是在search_field_tag值)

这里是我的events_controller代码

def search 
     @search_q = params[:query] 
     @events = Event.search @search_q #uses thinking sphinx 

     respond_with @events 
    end 

我也/views/events/search.html.erb

创建我敢肯定错误是从搜索表单,我说SEARCH_PATH行的到来。尽管如此,其他一切似乎都按照我期望的那样工作。例如,如果我访问/ events/search/someterm,它的工作方式与我预期的完全相同。这只是插入搜索表单并提交到事件#搜索的问题。任何帮助?谢谢!

+0

耙路线会产生什么结果? – 2012-04-13 05:24:22

+0

search /events/search/:query(.:format){:action =>“search”,:controller =>“events”} – botbot 2012-04-13 05:27:00

回答

1

我觉得这里的问题是,查询作为一个POST请求被传递。您的路线寻找:在你的路线的最后查询:

/events/search/:query 

所以刚落/:

/events/search 
这里,你定义

。该查询在post上作为params传递。无需在路线中使用它。

+0

感谢您的回复。我按照您的建议更新了路线,但现在出现了一些新问题:无法找到id = search的事件。显然它现在认为搜索是:id在/ events/search中。我也可以看到演出活动正在被调用。 – botbot 2012-04-13 06:20:37

+0

我也更新了我的代码,以显示我明确调用:method =>:get。 – botbot 2012-04-13 06:21:51

+0

确保您的搜索路线高于活动资源。路由按顺序运行,所以如果事件/:id路由是第一个,那么它将尝试查找带有搜索标识的事件并返回错误。 – 2012-04-16 15:54:24