Ruby on rails Rails 4设计、编辑、联接表ActionView::Template::Error(类:0x37682f95>;:0x6919b2b2>;)的未定义方法“任务定义”路径和

Ruby on rails Rails 4设计、编辑、联接表ActionView::Template::Error(类:0x37682f95>;:0x6919b2b2>;)的未定义方法“任务定义”路径和,ruby-on-rails,devise,jruby,pundit,Ruby On Rails,Devise,Jruby,Pundit,以下是我的用例: 我有一个为AuthN设计的用户模型,我正在为AuthZ使用Pundit 我通过子域约束限制对主应用程序的访问 我有一些页面是给最终用户的(在某个时候会是一个不同的登陆点),我有管理页面等。你知道演习的常见故事 我正在使用一个has_和_belown_to_many,使用一个带有:id的联接表 我将控制器、视图目录和迁移命名为复数,将模型命名为单数。示例:TaskDefinition=>Model,TaskDefinitions=>Controller和Tables 将生成默认路

以下是我的用例:

  • 我有一个为AuthN设计的用户模型,我正在为AuthZ使用Pundit
  • 我通过子域约束限制对主应用程序的访问
  • 我有一些页面是给最终用户的(在某个时候会是一个不同的登陆点),我有管理页面等。你知道演习的常见故事
  • 我正在使用一个has_和_belown_to_many,使用一个带有:id的联接表
  • 我将控制器、视图目录和迁移命名为复数,将模型命名为单数。示例:TaskDefinition=>Model,TaskDefinitions=>Controller和Tables
  • 将生成默认路由,我已经提供了内容
  • 我在视图目录中使用了partials,这是一个非常新的问题,因为它提供了从Ruby到JRuby的端口
  • 堆栈跟踪:

    ActionView::Template::Error (undefined method `task_definition_path' for #<#<Class:0x37682f95>:0x6919b2b2>):
        10:     <div class="col-md-10">
        11:       <div class="panel-body">
        12:         <div class="form">
        13:           <%= bootstrap_form_for @task do |f| %>
        14:               <div class="form-group">
        15:                 <%= render '/admin/task_definitions/errors' %>
        16:               </div>
      app/views/admin/task_definitions/edit.html.erb:13:in`_app_views_admin_task_definitions_edit_html_erb__1276994696_33458'
    
    视图:

        <div class="form">
          <%= bootstrap_form_for @task do |f| %>
              <div class="form-group">
                <%= render '/admin/task_definitions/errors' %>
              </div>
    

    \u路径
    \u url
    结尾的未定义方法错误通常表示路由帮助程序错误

    检查错误点,似乎有一个助手方法(
    bootstrap\u form\u for
    )正在调用路由助手
    task\u definitions\u path
    ,这是不正确的。根据路由文件,该路由在
    admin
    下具有名称空间,因此合适的路由帮助器是:

    admin_task_definitions_path  
    
    我不知道helper方法的
    bootstrap\u表单中有什么,所以我没有具体的修复方法。假设您使用引导表单gem,请跳过它并手动编写表单



    将来,
    rake routes
    将显示所有已注册的路由助手。用于调试错误路由帮助程序的简便列表

    谢谢你的帮助。我也有这个想法,并改变了引导程序的形式,并尝试了形式,返回相同的结果。我经常使用rake routes命令,我同意错误在于某些组件使用task\u definition\u path,但实际的路由是admin\u task\u definiton\u path。我曾尝试在路由中显式声明get,但它加载并发现对象很好。实际上,我从调用视图在控制器中找到了控制器和方法。我已经广泛地使用了它,但我没有看到这个错误的修复方法。问题是管理名称空间,我仍然没有弄清楚原因。如果我删除了名称空间,那么一切正常。如果我把它加回去,它会爆炸。路由显示了正确的路由,但它与路由文件中的名称空间不同。
    class Admin::TaskDefinitionsController < ApplicationController
      before_filter :authenticate_user!
      after_action :verify_authorized
    
    .....
    
      def edit
        @tasks = current_organization.task_definitions
        if(@tasks.size > 0 )
          @task = @tasks.find(params[:id])
          authorize @task
    
          # add breadcrumb
          add_breadcrumb @task.name, admin_task_definition_path(@task)
    
          unless current_user.org_super_admin? or current_user.finch_admin?
            unless @user == current_user
              redirect_to :back, :alert => "Access denied."
            end
          end
        end
      end
    end
    
    Rails.application.routes.draw do
     ......
    
      constraints(Finch::Constraints::SubdomainRequired) do
        #
        # dashboards
        #
        resource :dash_boards, only: [:index, :show, :edit, :update, :destroy]
    
        #
        # orgss
        #
        resource :organizations, only: [:index, :show, :edit, :update, :destroy]
    
        #
        # Only Admins are allowed to access
        #
        namespace :admin do
          #
          # Workflow Data
          #
          resources :task_definitions, only: [:index, :show, :edit, :update, :destroy]
          resources :task_steps, only: [:show, :edit, :update, :destroy]
          resource  :task_actions, only: [:show, :edit, :update, :destroy]
          resource  :task_action_attributes, only: [:show, :edit, :update, :destroy]
          resource  :task_transitions, only: [:show, :edit, :update, :destroy]
        end
      end
    end
    
        <div class="form">
          <%= bootstrap_form_for @task do |f| %>
              <div class="form-group">
                <%= render '/admin/task_definitions/errors' %>
              </div>
    
               edit_organizations GET    /organizations/edit(.:format)                organizations#edit
                    organizations GET    /organizations(.:format)                     organizations#show
                                  PATCH  /organizations(.:format)                     organizations#update
                                  PUT    /organizations(.:format)                     organizations#update
                                  DELETE /organizations(.:format)                     organizations#destroy
           admin_task_definitions GET    /admin/task_definitions(.:format)            admin/task_definitions#index
       edit_admin_task_definition GET    /admin/task_definitions/:id/edit(.:format)   admin/task_definitions#edit
            admin_task_definition GET    /admin/task_definitions/:id(.:format)        admin/task_definitions#show
    
    admin_task_definitions_path