我对routes.rb
的行为有疑问。以下代码完美地运行,但这意味着GET /noodles
和GET /
都将返回面条索引。由于noodles_path
将使用/noodles
,因此网址会变得不必要地长,因此会不断弹出。
root :to => 'noodles#index'
match '/new' => 'noodles#new', :as => :new_noodle, :via => [:get]
resources :noodles, :only => [:index, :create, :show]
尝试删除GET /noodles
,我试过了:
root :to => 'noodles#index'
match '/new' => 'noodles#new', :as => :new_noodle, :via => [:get]
resources :noodles, :only => [:create, :show]
match '/' => 'noodles#index', :as => :noodles, :via => [:get]
这似乎有效,但以某种方式中断了:create
方法,因为它们都有noodles
路径,即使我将其指定给:get
,也只会让它感到困惑({{1}看起来不同,rake routes
被提及两次,而在使用noodles
时,它只被提及一次)。因此,通过这些新路线,不可能制作出新的面条。
删除resources (...)
索引并将其设置为GET /noodles
而不破坏GET /
的正确方法是什么?
答案 0 :(得分:1)
实际上,如果你真的不需要,最好不要将非资源丰富的路由与资源丰富的路由混合起来。在这种情况下,你没有。
root :to => 'noodles#index'
resources :noodles
这是你想要的,你会有'/'和'/ noodles'路径引导你到面条#index,这就是你想要的。
看看你的rake路线,你正在创造一些丑陋的东西;)如果你决定从像resources :noodles, :except => :index
这样的面条资源中改变索引路线,你也摆脱了noodles_path和noodles_url方法。根本就是你可以随时改变主意。也许它会是sign_up页面,也许是不同的东西,也许它不会改变,但你不想放松那种自由。
答案 1 :(得分:0)
假设最佳解决方案是在尝试访问索引并使用这些路径时使用root_url
而不是noodles_url
root :to => 'noodles#index'
resources :noodles, :except => :index
所以基本上这只会创建除:index
之外的所有路由,因为此路由已经存在为root
。然后在视图中使用root_url
。