有一种情况,有多个控制器,如town_center控制器,锯木厂控制器,采石场控制器等。
我的应用程序的网址可能需要像/ town_center / view或sawmill / view,quarry / view等。
问题是如何实际编写这样的路线。例如,对于town_center控制器,我有类似的东西:
scope :path => '/town_center', :controller => :town_center do
get '/view/' => :view, :as => 'town_center'
end
虽然这很好,但是有一个问题。当我在town_center控制器中实际执行视图操作时,没有简单的方法来获取建筑物的ID,因为它不作为params属性存在于url中。
一个简单的想法是创建一条路线,如:
get '/view/:name' => :view, :as => 'view_building'
但这种方法的问题是所有内容都被重定向到一个控制器。所以,我的问题是,我怎样才能使网址上有一个标识符并仍然重定向到特定的控制器?
或者,如果您认为这不是一般概念,那么还有更好的方法吗?
答案 0 :(得分:1)
您可以使用RESTful路由,这已经成为Rails应用程序的标准。
MyApp::Application.routes.draw do
resources :town_centers
resources :sawmills
resources :quarries
end
编辑或针对单一路线,如评论中所示:
MyApp::Application.routes.draw do
resource :town_center
resource :sawmill
resource :quarry
end
这将自动为您提供创建,读取,更新和销毁各种模型所需的所有路线。
运行rake routes
将显示应用程序可用的所有路由。这将包括格式GET /town_centers
和GET /town_centers/:id
的GET路线,后者将在您的TownCentersController中运行 show 操作并渲染您的 / views / town_centers / show.html.erb 查看模板。
如果您是Rails的新手并且还没有阅读使用入门或路由指南,可以在此处找到它们: