2010-11-17 45 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