簡體   English   中英

Rails3:適當使用路由和資源

[英]Rails3: Appropriate use of routing and resources

我最近加入了Rails應用程序開發(Rails3)的世界,我可能正在濫用資源路由。

默認的資源路由為我經常使用的URL提供了一些非常方便的幫助方法。 我的問題是我有控制器,我將路由指定為資源豐富,只是為了利用這些輔助方法。 我有一些基本的網站導航,沒有資源業務。

resource :home do
  member do
    get 'main'
    get 'about'
    get 'login'
    get 'help'
  end
end

有沒有更好的方法去做我一直在做的事情? 什么不需要我每次有新的控制器操作時手動添加路由條目?

為了澄清,我想為控制器指定路由,而不必顯式添加任何新操作,但我也希望它自動生成輔助方法。 到目前為止,我必須為我想要的每個動作明確添加路由。 通過這樣做我可以得到類似的東西(以非資源的方式),

match 'home/about' => 'home#about'

但我不想寫出那些不屬於慣例的路線。

這是另一個更簡單的問題。 只需在routes.rb的底部添加一個通用路由即可

match ":controller/:action"

它將直接映射到指定控制器的指定操作。 如果你願意,你可以更具體一點。 例如,使用get而不是match來限制HTTP GET請求,指定applicaple控制器等。

get ":controller/:action", :constraints => { :controller => /home|help/ }

您可以查看控制器的公共實例方法並自動生成路由。

# routes.rb
HomeController.public_instance_methods(false).select{|m| !(m.to_s =~ /^_/)}.each do |m|
  match "home/#{m}", :action => m, :controller => HomeController, :as => "home_#{m}"
end

這將采用控制器中的顯式(非繼承)公共實例方法,並選擇以下划線開頭的方法(因為下划線的是生成過濾器的方法,其余的是實際操作)。 然后它將為每個生成一個命名路由。

請記住, routes.rb僅在服務器啟動時處理,因此您必須在添加新操作后重新啟動服務器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM