2010-04-27 49 views
0

不知道怎樣提出這個所以這裏去....如何從Rails link_to函數中刪除動作參數?

我有以下的link_to標籤:

<%= link_to("My test title",{:controller=>"search", :action=>"for-sale", :title => listing.title, :search_term => search_term, :id=> listing.id}) %> 

,並在我的routes.rb文件中的以下自定義路線:

map.connect ':controller/:action/:title/search_item/:id', :controller=>'search', :action=>'for_sale' 

產生一個非常好的SEO友好的URL:

/search/for-sale/sometitle/searchterm/123456 

哪有我刪除了:從兩個動作PARAM,問題是,當我拿出了:操作選項&我的link_to標籤更改爲:

<%= link_to("My test title",{:controller=>"search", :title => listing.title, :search_term => search_term, :id=> listing.id}) %> 

和我的自定義路線:

map.connect ':controller/:title/search_item/:id', :controller=>'search', :action=>'for_sale' 

生成的URL不再是搜索引擎友好的和非常難看:

/search?title=test&search_term=test&id=1141409 

我的自定義路由將重定向到控制器中的正確動作,所以沒有必要採取行動的選項是在URL 。任何時候我刪除或重命名:action選項爲其他 - URL被「扭曲」,你知道我該如何做到這一點?

一直在嘗試多種選擇,但似乎沒有任何工作。

謝謝!

回答

3

首先,你的路線':controller/:title/search_item/:id'沒有:search_term參數,但你試圖把它傳遞的link_to :search_term => search_term

其次,如果你總是使用控制器'search',你並不需要把它作爲參數傳遞。

所以,你的路線很可能成爲'search/:title/:search_term/:id'

另外,嘗試使用命名路線:

map.search 'search/:title/:search_term/:id', :controller=>'search', :action=>'for_sale' 

<%= link_to("My test title", search_path(listing.title, search_term, listing.id)) %> 

編輯:可選參數

您可以在年底參數提供缺省值路線。

所以,如果你設置

map.search 'search/:title/:search_term/:id', :controller=>'search', :action=>'for_sale', :id => nil, :search_term => nil 

可以不進行身份創建網址:search_path(listing.title, search_term) 或者沒有這兩個ID和SEARCH_TERM:search_path(listing.title)

如果你想只:search_term可選,把在該路線的結尾:

map.search 'search/:title/:id/:search_term', :controller=>'search', :action=>'for_sale', :search_term => nil 
+0

感謝您的! 使用指定的路由,雖然我失去了所有的參數,當我輸出參數。檢查待售頁面,散列不包含任何內容,它們在某處丟失,是否使用命名路由並仍然傳遞參數? – Jason 2010-04-27 23:23:21

+0

我發現這個問題,當其中一個參數是空白或空的,然後沒有任何參數傳遞給動作,它需要所有的參數有一些值,search_term是一個可能經常是空白的字符串....有任何想法嗎? – Jason 2010-04-28 00:19:58

+0

您可以使路線末端的參數爲可選。在答案中增加了信息。 – Voyta 2010-04-28 06:33:36