2012-02-02 75 views
0

有一种情况,其中有一个像town_center控制器,锯木厂控制器,采石场控制器等多个控制器。基于路线的不同控制器:名称

我的应用程序的URL可能需要像/ town_center/view或sawmill/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' 

但这种做法的问题是,一切都被重定向到一个控制器。所以,我的问题是,我如何使它在URL上有一个标识符,仍然重定向到特定的控制器?

或者如果您认为这是不正确的一般想法,有没有更好的方法来做到这一点?

回答

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中运行显示动作并呈现您的/views/town_centers/show.html.erb视图模板。

如果你是新来的Rails和尚未阅读入门路由导游,他们可以在这里找到:

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

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

+0

是的,我知道这些,但我不喜欢使用资源,我更喜欢手动编写我的路线。我知道我可以使用:id作为网址的一部分,但我觉得这是多余的,因为只有一个城镇中心有一个ID。但我想这是一条安全的步行路线。 – Spyros 2012-02-02 01:24:24

+0

所以你说每个实体的ID是静态的?如果这些是硬编码的ID,那么您应该能够将它们作为路由定义的一部分传递给它们。例如:'get'/ view /'=>:view,:as =>'town_center',:id => 14' – Ryan 2012-02-02 01:40:21

+0

路由资源不一定是复数。你可以有资源:town_center。我不会推荐滚动你自己的路线。 – 2012-02-02 01:51:36

相关问题