1

私のレーキルートでは、次のようになります。

project_todos GET    /project_todos(.:format)                   project_todos#index
                            POST   /project_todos(.:format)                   project_todos#create
           new_project_todo GET    /project_todos/new(.:format)               project_todos#new
          edit_project_todo GET    /project_todos/:id/edit(.:format)          project_todos#edit
               project_todo GET    /project_todos/:id(.:format)               project_todos#show
                            PUT    /project_todos/:id(.:format)               project_todos#update
                            DELETE /project_todos/:id(.:format)               project_todos#destroy
project_todos_toggle_status POST   /project_todos/toggle_status(.:format)     project_todos#toggle_status

から:

resources :project_todos

  post "project_todos/toggle_status"

ビューに次のような行があります。

<%= link_to 'Toggle Project', project_todos_toggle_status_path(id: todo.id), method: "post" %>

その結果、次のようなリンクになります。

http://localhost:3000/project_todos/toggle_status?id=1

次のエラーが発生します。 ここに画像の説明を入力してください

これは、showアクションに移動するという点で奇妙であり、id=toggle_statusを設定する理由や方法がわかりません。

これを機能させる方法について何かアイデアはありますか?私は過去にstatic_pagesコントローラーを使用して非常によく似た何かをしたことがありますが、それは何か違いがありますか?

更新:

development.log:

Started GET "/project_todos/1/toggle_status" for 127.0.0.1 at 2012-09-21 12:08:09 -0500

ActionController::RoutingError (No route matches [GET] "/project_todos/1/toggle_status"):
  actionpack (3.2.8) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
  actionpack (3.2.8) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
  railties (3.2.8) lib/rails/rack/logger.rb:26:in `call_app'
  railties (3.2.8) lib/rails/rack/logger.rb:16:in `call'
  actionpack (3.2.8) lib/action_dispatch/middleware/request_id.rb:22:in `call'
  rack (1.4.1) lib/rack/methodoverride.rb:21:in `call'
  rack (1.4.1) lib/rack/runtime.rb:17:in `call'
  activesupport (3.2.8) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
  rack (1.4.1) lib/rack/lock.rb:15:in `call'
  actionpack (3.2.8) lib/action_dispatch/middleware/static.rb:62:in `call'
  railties (3.2.8) lib/rails/engine.rb:479:in `call'
  railties (3.2.8) lib/rails/application.rb:223:in `call'
  rack (1.4.1) lib/rack/content_length.rb:14:in `call'
  railties (3.2.8) lib/rails/rack/log_tailer.rb:17:in `call'
  rack (1.4.1) lib/rack/handler/webrick.rb:59:in `service'
  /usr/local/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
  /usr/local/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
  /usr/local/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'


  Rendered /usr/local/lib/ruby/gems/1.9.1/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (0.5ms)

ルート.rb

resources :project_todos do
    member do
      post :toggle_status
    end
  end

コードを表示:

 <% @todos.each do |todo| %>
    <li class="todo_item todo"><%= todo.title %></li>
    <%= todo.id%>
    <%= link_to 'Toggle Project', toggle_status_project_todo_path(todo), method: "post" %>
<% end %>

application.js

//= require jquery
//= require jquery_ujs
//= require tinymce-jquery
//= require tinymce
//= require_tree .

アップデート#2

このようなエラーがこの問題を引き起こす可能性があります:

ここに画像の説明を入力してください

4

2 に答える 2

1

単一のリソースProjectTodoに対して「toggle_status」を試みていると思いますよね?Rails 3でこのルートを説明するためのより一般的な方法は、次のとおりです。

resources :project_todos do
  member do
    post :toggle_status
  end
end

これにより、ルートファイルに決定論的な順序が生成されます。

toggle_status_project_todo POST   /project_todos/:id/toggle_status(.:format) project_todos#toggle_status
             project_todos GET    /project_todos(.:format)                   project_todos#index
                           POST   /project_todos(.:format)                   project_todos#create
          new_project_todo GET    /project_todos/new(.:format)               project_todos#new
         edit_project_todo GET    /project_todos/:id/edit(.:format)          project_todos#edit
              project_todo GET    /project_todos/:id(.:format)               project_todos#show
                           PUT    /project_todos/:id(.:format)               project_todos#update
                           DELETE /project_todos/:id(.:format)               project_todos#destroy

ビューに書き込むことができます。

<%= link_to 'Toggle Project', toggle_status_project_todo_path(@todo), method: "post" %>

これは「http:// localhost:3000 / project_todos / 1/toggle_status」に投稿します

于 2012-09-21T16:42:02.197 に答える
0

あなたのroutes.rbproject_todosの線の上にあなたの線を動かしてみてくださいresources: project_todos

次に、IDバージョンの前にカスタムルートが見つかります。

于 2012-09-21T16:27:31.930 に答える