最近我碰到问题的问题在访问命名空间的控制器我有education/educations_controller.rb
父控制器访问子命名空间控制器
class Education::EducationssController < ApplicationController
def process_educations
if highschool
controller_to_redirect = 'highschool'
if bacholors
controller_to_redirect = 'bacholors'
else
controller_to_redirect = 'masters'
end
redirect_to :controller => controller_to_redirect, :action => 'process_educations'
end
end
和三个子控制器education/highschool_controller.rb
,education/bacholors_controller.rb
,education/masters_controller.rb
的所有指标的影响存在于educations_controller.rb
传递到这些控制器
class Education::HighschoolController < Education::EducationssController
def proceed_educations
do some process
end
end
class Education::BacholorsController < Education::EducationssController
def proceed_educations
do some process
end
end
class Education::MastersController < Education::EducationssController
def proceed_educations
do some process
end
end
而且各个视图来之后但在这个过程中的U RL变得太长,所以我想把除去从URL的所有控制器然后处理这样不论什么用户被引导到同一个URL,对于本我改变routes.rb
作为
namespace :educations,:path => '' do
scope "/educations" do
get 'proceed_educations',to:'educations#proceed_educations'
post 'proceed_educations',to:'educations#proceed_educations'
end
resource :highschool ,:path => '' do
get 'proceed_educations',to:'highschool#proceed_educations'
post 'proceed_educations',to:'highschool#proceed_educations'
end
resource :bacholors ,:path => '' do
get 'proceed_educations',to:'bacholors#proceed_educations'
post 'proceed_educations',to:'bacholors#proceed_educations'
end
resource :masters ,:path => '' do
get 'proceed_educations',to:'masters#proceed_educations'
post 'proceed_educations',to:'masters#proceed_educations'
end
end
这产生相同的URL为每个控制器但是当我尝试访问他们,如educations_controller.rb
他们总是重定向到相同的控制器HighschoolController
。
我不明白我在做什么事情错了,请帮我理解这个过程,或者如果有更好的方法做到这一点,那么请建议。
'/ educations/highschool'的网址太长了?如果是的话,为什么不把它做成'/ highschool'?也许我不明白你的意图,但问题是你正在为多个路线定义相同的端点(它究竟是怎么知道去哪里的?) – engineersmnky
另外,它会去高中路线,因为该网址是第一个比赛。 Rails获取请求,然后滚动路径文件直到找到第一个匹配的路由(它不会继续查看是否可能更紧密)。在这种情况下,它找到高中路线作为比赛。 – bkunzi01
那么我如何隐藏控制器的名称从URL和显示所有控制器的动作从相同的网址 – Mike