使用以下路线:
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"}
这里有什么问题?我将天气作为get
和resource
放在那里,但我真的想把它作为我locations
控制器上的一个动作,因为它实际上不是一个单独的资源。我有什么想法吗?
答案 0 :(得分:2)
如果天气真的不是一个单独的资源,那么您可能不想在URL中使用它,只需调用locations /:id来检索该位置的天气。但是,如果你正在做其他地方的事情 - 我怀疑你是 - 你应该继续为天气创造资源。除了show方法之外,它不需要包含任何内容,但是仅仅为了库存目的而且是RESTful是好的。
尝试以下方法。我认为它会为您提供所需的信息:
resources :locations do
matches "weather" => "weather#show"
end
答案 1 :(得分:1)
只需删除'资源:天气'即可获得location_weather路线。如果只是在Locations控制器上的自定义操作将处理它。