无路由匹配:使用嵌套命名空间时缺少必需的

这是我的routes.rb填充

Rails.application.routes.draw do namespace :main, path: ':master_url' do root 'sites#index' namespace :dashboard do root 'dashboards#index' #get 'masters/index' resources :masters end get "/:action" => 'sites#:action' end root 'main/sites#index' end 

这是命令耙路线

  main_root GET /:master_url(.:format) main/sites#index main_dashboard_root GET /:master_url/dashboard(.:format) main/dashboard/dashboards#index main_dashboard_masters GET /:master_url/dashboard/masters(.:format) main/dashboard/masters#index POST /:master_url/dashboard/masters(.:format) main/dashboard/masters#create new_main_dashboard_master GET /:master_url/dashboard/masters/new(.:format) main/dashboard/masters#new edit_main_dashboard_master GET /:master_url/dashboard/masters/:id/edit(.:format) main/dashboard/masters#edit main_dashboard_master GET /:master_url/dashboard/masters/:id(.:format) main/dashboard/masters#show PATCH /:master_url/dashboard/masters/:id(.:format) main/dashboard/masters#update PUT /:master_url/dashboard/masters/:id(.:format) main/dashboard/masters#update DELETE /:master_url/dashboard/masters/:id(.:format) main/dashboard/masters#destroy main GET /:master_url/:action(.:format) main/sites#:action root GET / main/sites#index 

这是main / dashboard / masters_controller.rb

 class Main::Dashboard::MastersController < ApplicationController respond_to :html, :js before_action :all_masters, only: [:index, :create, :update, :destroy] before_action :set_master, only: [:edit, :update, :destroy] before_action :init_master layout 'main' def new @master = Master.new end def create @master = Master.create(conf_params) end def update @master.update_attributes(conf_params) end def destroy @master.destroy end private def all_masters @masters = Master.all end def set_master @master = Master.find(params[:id]) end def conf_params params.require(:master).permit(:title,:url) end def init_master @master_url = Master.find_by_url(params[:master_url]) end end 

关键是我想制作一个关于多站点的应用程序,所以:main命名空间取代了从Master的表中获取的动态URL之一。 感谢这篇文章早些时候这个问题解决了,但是当我在主控制器视图中部分渲染表单和链接时我面临一个新问题,我使用ajax为每个链接点击并形成发布btw,但我认为这个ajax方法不应该破坏任何东西。

主/仪表板/硕士/ index.js.erb的

 $('#content').html(""); $('#master-list').html(""); 

… / _ index.html.erb

  

Master Conference

All Conference

… / _ master.html.erb

从这里我尝试编辑路径:edit_main_dashboard_master_path(编辑),它打破了错误消息所需的ID,所以我提供master_url.url,奇怪的是错误消失了

                

… / _ form_master.html.erb

这是现在存在的错误, 当我创建一个新的主它运行成功但当我点击link_to编辑表单不会显示有关缺少id的错误 ,然后当我点击链接删除,它成功销毁 ..

 

Add/Edit Conference

inheritance人的错误信息

  ActionView::Template::Error (No route matches {:action=>"show", :controller=>"main/dashboard/masters", :format=>nil, :id=>nil, :master_url=>#} missing required keys: [:id]): 3: 

Add/Edit Conference

4:
5:
6: 7: 8: 9: app/views/main/dashboard/masters/_form_master.html.erb:6:in `_app_views_main_dashboard_masters__form_master_html_erb__87590790_31195656' app/views/main/dashboard/masters/edit.js.erb:1:in `_app_views_main_dashboard_masters_edit_js_erb

任何帮助表示赞赏btw,即时通讯使用Rails 4.1

好的,通过更改编辑link_to路径解决了这个问题,其中:

 link_to edit_main_dashboard_master_path(@master_url.url, master), remote: true do 

要么

  link_to :controller=>"masters",:action =>"edit",:id => master do 

这两行都将返回正确的路径,因为这个问题使用嵌套的命名空间,删除’Edit’参数会使返回Stringify键的错误消失,无论如何,谢谢@Pavan

同样的问题在这里 鉴于命名空间是“ns”。 下列:

 = link_to "User detail", @user 

要么

 = link_to "User detail", ns_user_path(@user) 

将生成此错误:

 ActionView::Template::Error: No route matches {:action=>"show", :controller=>"ns/users", :id=>nil, ... 

解决了使用:

 = link_to "User detail", ns_user_path(id: @user.id) 

我希望能有所帮助。