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 将生成默认路
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