我遇到命名空间控制器和路由问题。我有以下命名空间路线。
namespace :institution do
resources :students
end
与
一起 resources :students, :only => [] do
resources :college_selections, :only =>[:index, :create, :update]
resources :progress, :only => [:index] do
collection {get 'compare'}
end
resources :marks
end
它生成了以下路线
institution_students GET /institution/students(.:format) {:action=>"index", :controller=>"institution/students"}
POST /institution/students(.:format) {:action=>"create", :controller=>"institution/students"}
new_institution_student GET /institution/students/new(.:format) {:action=>"new", :controller=>"institution/students"}
edit_institution_student GET /institution/students/:id/edit(.:format) {:action=>"edit", :controller=>"institution/students"}
institution_student GET /institution/students/:id(.:format) {:action=>"show", :controller=>"institution/students"}
PUT /institution/students/:id(.:format) {:action=>"update", :controller=>"institution/students"}
DELETE /institution/students/:id(.:format) {:action=>"destroy", :controller=>"institution/students"}
我在apps目录的机构目录中有一个学生控制器。它有以下结构。
class Institution::StudentsController < ApplicationController
before_filter :require_login
load_and_authorize_resource
..........
.........
end
现在,当我尝试使用link_to帮助方法重定向到学生显示页面时,如下所示
<%= link_to "show", institution_student_path(student) %>
然后它显示了带有句点(。)的有线链接。假设学生ID为100,它生成了这样的路线
institution/students/4.100
这里4是我猜的当前机构ID。为什么要生成这样的路线。
当我点击显示链接时,它给了我错误的说法
Expected /home/gagan/projects/App_name/app/Institution/students_controller.rb to define StudentsController
我在这里缺少什么。
提前致谢。
答案 0 :(得分:1)
你应该使用
<%= link_to "show", institution_student_path(institution, student) %>
或
<%= link_to "show", institution_student_path(student.institution, student) %>
如果学生和学校之间存在关联。
答案 1 :(得分:1)
没关系,我得到了答案。实际上我把机构文件夹放在控制器文件夹外面,这是因为这个文件夹里面的控制器没有被识别。因此解决了这个问题。