Rails路由:将root定义为命名空间

Sai*_*aev 8 ruby ruby-on-rails rails-routing

我有2个控制器:

app/
   /controllers
      posts_controllers.rb
      /mobile
         posts_controllers.rb
Run Code Online (Sandbox Code Playgroud)

和我的routes.rb看起来像这样:

root :to => "posts#index"
resources :posts

namespace :mobile do
   root :to => "posts#index"
   resources :posts
end
Run Code Online (Sandbox Code Playgroud)

但是当我访问时/mobile,无论如何渲染第一个控制器的索引页面,也尝试了这个:

namespace :mobile do
   root :to => "mobile/posts#index"
   resources :posts
end
Run Code Online (Sandbox Code Playgroud)

但它给了我错误:uninitialized constant Mobile::Mobile 我想渲染第二个控制器的索引页面,我该怎么做?

编辑

通过输入/ mobile我想渲染位于此处的文件:

app/
   views/
       /mobile
          /posts
             index.html.erb
Run Code Online (Sandbox Code Playgroud)

但它在这里是rending文件:

app/
   views/
       /posts
          index.html.erb
Run Code Online (Sandbox Code Playgroud)

Ahm*_*RAN 20

namespace :mobile do
   root :to => "posts#index"
   resources :posts
end

root :to => "posts#index"
resources :posts
Run Code Online (Sandbox Code Playgroud)

代替

root :to => "posts#index"
resources :posts

namespace :mobile do
   root :to => "posts#index"
   resources :posts
end
Run Code Online (Sandbox Code Playgroud)

  • 这是一个比接受的答案好得多的解决方案! (4认同)

shi*_*ime 8

namespace :mobile do
   get "/" => "posts#index"
   resources :posts
end
Run Code Online (Sandbox Code Playgroud)

使用命名空间已经将移动设备添加到该块内的控制器名称.


Ear*_*hao 5

Rails.application.routes.draw do

 root to: 'front/homes#index'

 namespace :front do
  resources :homes
 end 

 namespace :admin do 
  resources :interviews 
 end

 resources :meetings do 
  resources :slides
 end

end
Run Code Online (Sandbox Code Playgroud)

rails5中有效。