开发者

rails: undefined method and form_tags

I have this in courses.html.erb under app/views/students

<% 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%>

I have this in my students_controller.rb under app/controllers:

  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

And in my routes.rb, I have:

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

However, I am getting this error:

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

What am I missing here?

Rake routes output:

          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)               开发者_StackOverflow社区           {: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"}


Your routes syntax is wrong. Try this instead:

resources :students do
  resources :awards
  member do
    get "courses"
    post "course_add"
    post "course_remove"
  end
end
  • http://guides.rubyonrails.org/routing.html#nested-resources
  • http://guides.rubyonrails.org/routing.html#adding-more-restful-actions
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜