2010-11-17 61 views
3

我想限制我的路由文件中的路徑爲特定的格式。Rails 3路由和格式特定性

我想這個工作: app.com/party_favors/list.json

不是這個

app.com/party_favors/list或本 app.com/party_favors/list.html或本 app.com/party_favors/list.asdasdasda

有一個簡單的辦法只允許在比賽進入一定的格式在路線文件?

謝謝!

回答

1

據我知道你可以在控制器處理這個,而不是路由

respond_to do |format| 
    format.html 
    format.json { render :json => @abcd } 
    format.any { render :text => "Invalid format", :status => 403 } 
end 
3

你可以明確地映射像這樣

match 'party_favors/list.json', :controller => 'party_favors', :action => 'list', :format => 'json' 
+0

多數民衆贊成多麼我認爲我應該能夠做,但耙路線在生成的路線末尾推((:格式):/ – skk5m 2010-11-17 12:21:31

+0

我認爲你將不得不定義所有的路徑,並更少地依賴生成器 – 2011-05-16 09:35:11

0

我結束了這個解決方案會爲我的2個公共暴露的方法。 before filter option,因爲它發出404s。我真的希望有一個更乾淨的方式來做到這一點。

謝謝大家的回答。我很感激。 :)

2

我發現下面的工作對我來說(滑軌3.1.1)

match '/categories/:id.json'=>'categories#show', :format=>false, :defaults=>{:format=>'json'} 
11

的Rails 3還提供了可以在路線上指定的:constraints option。這個工作路由在同一網址到不同的控制器,這取決於格式:

# http://app.com/party_favors.html gets routed to Web::PartyFavorsController#index 
resources :party_favors, :module => "web", :constraints => {:format => :html} 

# http://app.com/party_favors.xml gets routed to PartyFavorsController#index 
resources :party_favors 

我嘗試用Rails 2 :requirements選擇,但它似乎不那麼靈活。我不知道有什麼方法將它構建到Rails 2的路由中,因此您必須使用其他建議之一。

+0

這不會限制對這些格式的請求,請參閱下面的答案以獲得正確的實現 – koonse 2013-02-06 07:36:49

4

如果您想將它們限制爲特定的格式(例如html或json),您必須將這些路由包含在範圍中。不幸的是,這種情況下的約束條件並不像預期的那樣工作。

這是這樣一個塊的例子...

scope :format => true, :constraints => { :format => 'json' } do 
    get '/bar' => "bar#index_with_json" 
end 

更多信息可以在這裏找到:https://github.com/rails/rails/issues/5548

這個答案是我以前在這裏的答案抄..

Rails Routes - Limiting the available formats for a resource