rails:undefined方法和form_tags

时间:2011-01-09 23:00:26

标签: ruby

我在app / views / students

下的courses.html.erb中有这个
<% if @student.courses.count < Course.count then%>
  <% form_tag(course_add_student_path(@student)) do%>
  <%= select_tag(:course, options_from_collection_for_select(@student.unenrolled_courses, :id, :name))%>
  <%= submit_tag 'Enroll'%>
  <%end%>
  <%else%>
  <p><%=h @student.name%> is enrolled in every course. </p>
 <%end%>

我在app / controllers下的students_controller.rb中有这个:

  def course_add
    @student = Student.find(params[:id])
    @course = Course.find(params[:course])

    unless @student.enrolled_in?(@course)
      @student.coursess << @course
      flash[:notice] = 'course added'
    else
      flash[:error] = 'course already enrolled'
    end
    redirect_to :action => courses, :id => @student
  end

在我的routes.rb中,我有:

  resources :students, :has_many => [:awards], :member => {:courses => :get, :course_add => :post, :course_remove => :post}

但是,我收到此错误:

undefined method `course_add_student_path' for #<#<Class:0x105321d78>:0x1053200e0>

我在这里缺少什么?

Rake路线输出:

          students GET    /students(.:format)                             {:action=>"index", :controller=>"students"}
                   POST   /students(.:format)                             {:action=>"create", :controller=>"students"}
       new_student GET    /students/new(.:format)                         {:action=>"new", :controller=>"students"}
      edit_student GET    /students/:id/edit(.:format)                    {:action=>"edit", :controller=>"students"}
           student GET    /students/:id(.:format)                         {:action=>"show", :controller=>"students"}
                   PUT    /students/:id(.:format)                         {:action=>"update", :controller=>"students"}
                   DELETE /students/:id(.:format)                         {:action=>"destroy", :controller=>"students"}
           courses GET    /courses(.:format)                              {:action=>"index", :controller=>"courses"}
                   POST   /courses(.:format)                              {:action=>"create", :controller=>"courses"}
        new_course GET    /courses/new(.:format)                          {:action=>"new", :controller=>"courses"}
       edit_course GET    /courses/:id/edit(.:format)                     {:action=>"edit", :controller=>"courses"}
            course GET    /courses/:id(.:format)                          {:action=>"show", :controller=>"courses"}
                   PUT    /courses/:id(.:format)                          {:action=>"update", :controller=>"courses"}
                   DELETE /courses/:id(.:format)                          {:action=>"destroy", :controller=>"courses"}
    student_awards GET    /students/:student_id/awards(.:format)          {:action=>"index", :controller=>"awards"}
                   POST   /students/:student_id/awards(.:format)          {:action=>"create", :controller=>"awards"}
 new_student_award GET    /students/:student_id/awards/new(.:format)      {:action=>"new", :controller=>"awards"}
edit_student_award GET    /students/:student_id/awards/:id/edit(.:format) {:action=>"edit", :controller=>"awards"}
     student_award GET    /students/:student_id/awards/:id(.:format)      {:action=>"show", :controller=>"awards"}
                   PUT    /students/:student_id/awards/:id(.:format)      {:action=>"update", :controller=>"awards"}
                   DELETE /students/:student_id/awards/:id(.:format)      {:action=>"destroy", :controller=>"awards"}
   courses_student GET    /students/:id/courses(.:format)                 {:action=>"courses", :controller=>"students"}
                   GET    /students(.:format)                             {:action=>"index", :controller=>"students"}
                   POST   /students(.:format)                             {:action=>"create", :controller=>"students"}
                   GET    /students/new(.:format)                         {:action=>"new", :controller=>"students"}
                   GET    /students/:id/edit(.:format)                    {:action=>"edit", :controller=>"students"}
                   GET    /students/:id(.:format)                         {:action=>"show", :controller=>"students"}
                   PUT    /students/:id(.:format)                         {:action=>"update", :controller=>"students"}
                   DELETE /students/:id(.:format)                         {:action=>"destroy", :controller=>"students"}

1 个答案:

答案 0 :(得分:1)

您的路线语法错误。试试这个:

resources :students do
  resources :awards
  member do
    get "courses"
    post "course_add"
    post "course_remove"
  end
end