gpt4 book ai didi

ruby-on-rails - 从父 Controller 访问子命名空间 Controller

转载 作者:太空宇宙 更新时间:2023-11-03 16:16:28 26 4
gpt4 key购买 nike

最近我在访问命名空间 Controller 时遇到了问题 我在 education/educations_controller.rb 中有一个父 Controller 作为

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

还有三个子 Controller education/highschool_controller.rb , education/bacholors_controller.rb , education/masters_controller.rb 以及所有参数在 educations_controller.rb 中传递给这些 Controller

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

之后出现了各自的 View ,但在此过程中,url 变得太长,所以我想从 url 中删除所有 Controller ,然后进行处理,因此无论用户是否被带到相同的 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

这为每个 Controller 生成了相同的 url,但是当我尝试像在 educations_controller.rb 中那样访问它们时,它们总是重定向到相同的 Controller HighschoolController

我没有找到我做错的地方,请帮助我理解这个过程,或者如果有更好的方法,请提出建议。

最佳答案

如果您想避免为两个命名空间 Controller 制作相同的 URL,Rails 将很难理解哪个 Controller 发送哪个请求。

但是,您可以做的是,在您的 routes.rb 中,您可以取消显示 Controller 名称并可以在其中添加空间以进行区分,如下所示:

namespace :educations,:path => '' do
scope "/educations",:path => '' do
get 'proceed_educations',to:'educations#proceed_educations',:path => ''
post 'proceed_educations',to:'educations#proceed_educations',:path => ''
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',:path => ''
post 'proceed_educations',to:'bacholors#proceed_educations',:path => ''
end
resource :masters ,:path => ' ' do
get 'proceed_educations',to:'masters#proceed_educations',:path => ''
post 'proceed_educations',to:'masters#proceed_educations',:path => ''
end
end

这样,URL 将相同但带有额外的空格。

关于ruby-on-rails - 从父 Controller 访问子命名空间 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43257158/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com