【问题标题】:Rails routing error: No route matches [POST] "/students/1"Rails 路由错误:没有路由匹配 [POST] "/students/1"
【发布时间】:2012-08-13 04:28:34
【问题描述】:

我收到一个路由错误:没有路由匹配 [POST] "/students/1" 我无法弄清楚。以下是详细信息。

查看代码:

<% @students.each do |student| %>
.
.
    <td><%= link_to 'Show', student %></td>
    <td><%= link_to 'Edit', edit_student_path(student) %></td>
    <td><%= link_to 'Select Subjects', select_path(student) %></td>  # error occurs here

在我的学生控制器中:

def select
  .
  .
end

routes.rb: HomeSchool::Application.routes.draw 做

  resources :notes

  resources :assignments

  resources :subjects do
    resources :assignments, :only => [:create, :index, :new]
  end

  resources :students

  resources :resources

  match "students/:id/select" => "students#select", :as => :select

  root :to => 'students#index'

end

rake 路由的输出是:

                       GET    /students/:id/select(.:format)                  students/:id#select
                 notes GET    /notes(.:format)                                notes#index
                       POST   /notes(.:format)                                notes#create
              new_note GET    /notes/new(.:format)                            notes#new
             edit_note GET    /notes/:id/edit(.:format)                       notes#edit
                  note GET    /notes/:id(.:format)                            notes#show
                       PUT    /notes/:id(.:format)                            notes#update
                       DELETE /notes/:id(.:format)                            notes#destroy
           assignments GET    /assignments(.:format)                          assignments#index
                       POST   /assignments(.:format)                          assignments#create
        new_assignment GET    /assignments/new(.:format)                      assignments#new
       edit_assignment GET    /assignments/:id/edit(.:format)                 assignments#edit
            assignment GET    /assignments/:id(.:format)                      assignments#show
                       PUT    /assignments/:id(.:format)                      assignments#update
                       DELETE /assignments/:id(.:format)                      assignments#destroy
   subject_assignments GET    /subjects/:subject_id/assignments(.:format)     assignments#index
                       POST   /subjects/:subject_id/assignments(.:format)     assignments#create
new_subject_assignment GET    /subjects/:subject_id/assignments/new(.:format) assignments#new
              subjects GET    /subjects(.:format)                             subjects#index
                       POST   /subjects(.:format)                             subjects#create
           new_subject GET    /subjects/new(.:format)                         subjects#new
          edit_subject GET    /subjects/:id/edit(.:format)                    subjects#edit
               subject GET    /subjects/:id(.:format)                         subjects#show
                       PUT    /subjects/:id(.:format)                         subjects#update
                       DELETE /subjects/:id(.:format)                         subjects#destroy
              students GET    /students(.:format)                             students#index
                       POST   /students(.:format)                             students#create
           new_student GET    /students/new(.:format)                         students#new
          edit_student GET    /students/:id/edit(.:format)                    students#edit
               student GET    /students/:id(.:format)                         students#show
                       PUT    /students/:id(.:format)                         students#update
                       DELETE /students/:id(.:format)                         students#destroy
             resources GET    /resources(.:format)                            resources#index
                       POST   /resources(.:format)                            resources#create
          new_resource GET    /resources/new(.:format)                        resources#new
         edit_resource GET    /resources/:id/edit(.:format)                   resources#edit
              resource GET    /resources/:id(.:format)                        resources#show
                       PUT    /resources/:id(.:format)                        resources#update
                       DELETE /resources/:id(.:format)                        resources#destroy
                select        /students/:id/select(.:format)                  students#select
                  root        /                                               students#index

有什么建议吗?我很难准确掌握rails中的路由应该如何工作,我还没有找到任何关于它的论文,但我很确定没有为我的选择路线列出任何方法至少是我的问题。

谢谢,

【问题讨论】:

  • 你确定错误发生在你说的那一行吗?
  • 有些地方不在您的问题范围内。请注意 rake:routes 顶部的行——GET /students/:id/select(.:format) students/:id#select。首先,为此只定义了一个 GET 方法。其次,students/:id 没有控制器可以进行选择操作。 routes.rb 文件中没有任何内容会导致这种情况。我实际上对您如何认为您的控制器名称为 students/:id. 很感兴趣
  • 好的,现在修好了,但我不知道我是怎么想到我有一个学生/:id 控制器的。

标签: ruby-on-rails ruby-on-rails-3


【解决方案1】:

尝试删除routes.rb 文件中的match 并将students 资源更改为:

resources :students do
  member do
    get 'select'
  end
end

同时更新您的视图以调用select_student_path(student)

【讨论】:

    【解决方案2】:

    这是因为您的 routes.rb 文件。 “/students/new”中的post方法没有回调

    纠正这个问题。 转到 routes.rb 并在结束前添加post 'students/new' to: 'students#new'

    并检查rails routes。您将在那里找到帖子的路由路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多