Rails路由问题,资源,资源还是得到?

时间:2011-05-23 01:59:24

标签: ruby-on-rails routing

使用以下路线:

resources :locations do
  resources :newsitems
  resource :weather
  get 'weather'
end

我没有针对天气get行动的命名路线:

   location_weather POST   /locations/:location_id/weather(.:format)                         {:action=>"create", :controller=>"weathers"}
 new_location_weather GET    /locations/:location_id/weather/new(.:format)                     {:action=>"new", :controller=>"weathers"}
edit_location_weather GET    /locations/:location_id/weather/edit(.:format)                    {:action=>"edit", :controller=>"weathers"}
                      GET    /locations/:location_id/weather(.:format)                         {:action=>"show", :controller=>"weathers"}
                      PUT    /locations/:location_id/weather(.:format)                         {:action=>"update", :controller=>"weathers"}
                      DELETE /locations/:location_id/weather(.:format)                         {:action=>"destroy", :controller=>"weathers"}

这里有什么问题?我将天气作为getresource放在那里,但我真的想把它作为我locations控制器上的一个动作,因为它实际上不是一个单独的资源。我有什么想法吗?

2 个答案:

答案 0 :(得分:2)

如果天气真的不是一个单独的资源,那么您可能不想在URL中使用它,只需调用locations /:id来检索该位置的天气。但是,如果你正在做其他地方的事情 - 我怀疑你是 - 你应该继续为天气创造资源。除了show方法之外,它不需要包含任何内容,但是仅仅为了库存目的而且是RESTful是好的。

尝试以下方法。我认为它会为您提供所需的信息:

resources :locations do
  matches "weather" => "weather#show"
end

答案 1 :(得分:1)

只需删除'资源:天气'即可获得location_weather路线。如果只是在Locations控制器上的自定义操作将处理它。