基于路由的不同控制器:名称

时间:2012-02-02 00:47:18

标签: ruby-on-rails ruby-on-rails-3

有一种情况,有多个控制器,如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'

但这种方法的问题是所有内容都被重定向到一个控制器。所以,我的问题是,我怎样才能使网址上有一个标识符并仍然重定向到特定的控制器?

或者,如果您认为这不是一般概念,那么还有更好的方法吗?

1 个答案:

答案 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_centersGET /town_centers/:id的GET路线,后者将在您的TownCentersController中运行 show 操作并渲染您的 / views / town_centers / show.html.erb 查看模板。

如果您是Rails的新手并且还没有阅读使用入门路由指南,可以在此处找到它们:

Rails入门:http://guides.rubyonrails.org/getting_started.html

Rails路由:http://guides.rubyonrails.org/routing.html