1

Rails 2 用に設計された Redmine プラグインを Rails 3 で動作するようにしようとしています。

https://github.com/dalyons/redmine-todos-scrum-plugin

私はほとんどの部分を修正しましたが、ルートを機能させることにまったく成功していません。Rails 2
の元のルートは次のとおりです。

map.resources :todos, :name_prefix => 'project_', :path_prefix => '/projects/:project_id',
  :member => {:toggle_complete => :post }, :collection => {:sort => :post}

map.resources :todos, :name_prefix => 'user_', :path_prefix => '/users/:user_id', :controller => :mytodos,
  :member => {:toggle_complete => :post }, :collection => {:sort => :post}

map.my_todos 'my/todos', :controller => :mytodos, :action => :index
map.connect 'projects/:project_id/todos/show/:id', :controller => "todos", :action => "show"

rake routes以下を出力します。

          sort_project_todos POST    /projects/:project_id/todos/sort(.:format)                 {:controller=>"todos", :action=>"sort"}
               project_todos GET     /projects/:project_id/todos(.:format)                      {:controller=>"todos", :action=>"index"}
                             POST    /projects/:project_id/todos(.:format)                      {:controller=>"todos", :action=>"create"}
            new_project_todo GET     /projects/:project_id/todos/new(.:format)                  {:controller=>"todos", :action=>"new"}
toggle_complete_project_todo POST    /projects/:project_id/todos/:id/toggle_complete(.:format)  {:controller=>"todos", :action=>"toggle_complete"}
           edit_project_todo GET     /projects/:project_id/todos/:id/edit(.:format)             {:controller=>"todos", :action=>"edit"}
                project_todo GET     /projects/:project_id/todos/:id(.:format)                  {:controller=>"todos", :action=>"show"}
                             PUT     /projects/:project_id/todos/:id(.:format)                  {:controller=>"todos", :action=>"update"}
                             DELETE  /projects/:project_id/todos/:id(.:format)                  {:controller=>"todos", :action=>"destroy"}
             sort_user_todos POST    /users/:user_id/todos/sort(.:format)                       {:controller=>"mytodos", :action=>"sort"}
                  user_todos GET     /users/:user_id/todos(.:format)                            {:controller=>"mytodos", :action=>"index"}
                             POST    /users/:user_id/todos(.:format)                            {:controller=>"mytodos", :action=>"create"}
               new_user_todo GET     /users/:user_id/todos/new(.:format)                        {:controller=>"mytodos", :action=>"new"}
   toggle_complete_user_todo POST    /users/:user_id/todos/:id/toggle_complete(.:format)        {:controller=>"mytodos", :action=>"toggle_complete"}
              edit_user_todo GET     /users/:user_id/todos/:id/edit(.:format)                   {:controller=>"mytodos", :action=>"edit"}
                   user_todo GET     /users/:user_id/todos/:id(.:format)                        {:controller=>"mytodos", :action=>"show"}
                             PUT     /users/:user_id/todos/:id(.:format)                        {:controller=>"mytodos", :action=>"update"}
                             DELETE  /users/:user_id/todos/:id(.:format)                        {:controller=>"mytodos", :action=>"destroy"}
                    my_todos         /my/todos                                                  {:controller=>"mytodos", :action=>"index"}
                                     /projects/:project_id/todos/show/:id                       {:controller=>"todos", :action=>"show"}

Rails 3で取得した最も近いものは次のとおりです。

scope '/projects/:project_id', :name_prefix => 'project_' do
  resources :todos, :controller => 'todos' do
    member do
      post :toggle_complete
    end

    collection do
      post :sort
    end
  end
end

scope '/users/:user_id', :name_prefix => 'user_' do
  resources :todos, :controller => 'mytodos' do
    member do
      post :toggle_complete
    end

    collection do
      post :sort
    end
  end
end

match 'my/todos' => 'mytodos#index', :as => :my_todos
match 'projects/:project_id/todos/show/:id' => 'todos#show'

rake routes以下を出力します。

toggle_complete_todo POST    /projects/:project_id/todos/:id/toggle_complete(.:format)  todos#toggle_complete {:name_prefix=>"project_"}
          sort_todos POST    /projects/:project_id/todos/sort(.:format)                 todos#sort {:name_prefix=>"project_"}
               todos GET     /projects/:project_id/todos(.:format)                      todos#index {:name_prefix=>"project_"}
                     POST    /projects/:project_id/todos(.:format)                      todos#create {:name_prefix=>"project_"}
            new_todo GET     /projects/:project_id/todos/new(.:format)                  todos#new {:name_prefix=>"project_"}
           edit_todo GET     /projects/:project_id/todos/:id/edit(.:format)             todos#edit {:name_prefix=>"project_"}
                todo GET     /projects/:project_id/todos/:id(.:format)                  todos#show {:name_prefix=>"project_"}
                     PUT     /projects/:project_id/todos/:id(.:format)                  todos#update {:name_prefix=>"project_"}
                     DELETE  /projects/:project_id/todos/:id(.:format)                  todos#destroy {:name_prefix=>"project_"}
                     POST    /users/:user_id/todos/:id/toggle_complete(.:format)        mytodos#toggle_complete {:name_prefix=>"user_"}
                     POST    /users/:user_id/todos/sort(.:format)                       mytodos#sort {:name_prefix=>"user_"}
                     GET     /users/:user_id/todos(.:format)                            mytodos#index {:name_prefix=>"user_"}
                     POST    /users/:user_id/todos(.:format)                            mytodos#create {:name_prefix=>"user_"}
                     GET     /users/:user_id/todos/new(.:format)                        mytodos#new {:name_prefix=>"user_"}
                     GET     /users/:user_id/todos/:id/edit(.:format)                   mytodos#edit {:name_prefix=>"user_"}
                     GET     /users/:user_id/todos/:id(.:format)                        mytodos#show {:name_prefix=>"user_"}
                     PUT     /users/:user_id/todos/:id(.:format)                        mytodos#update {:name_prefix=>"user_"}
                     DELETE  /users/:user_id/todos/:id(.:format)                        mytodos#destroy {:name_prefix=>"user_"}
            my_todos         /my/todos(.:format)                                        mytodos#index
                             /projects/:project_id/todos/show/:id(.:format)             todos#show

私は:name_prefix正しく使用していないと推測しているため、パスが重複して省略されます。

どんな助けでも大歓迎です。

編集
これが最善の方法かどうかはわかりませんが、次のルートはRails 3で機能しています:

scope '/projects/:project_id' do
  resources :todos, :controller => 'todos', :as => 'project_todos' do
    member do
      post :toggle_complete
    end

    collection do
      post :sort
    end
  end
end

scope '/users/:user_id' do
  resources :todos, :controller => 'mytodos', :as => 'user_todos' do
    member do
      post :toggle_complete
    end

    collection do
      post :sort
    end
  end
end

match 'my/todos' => 'mytodos#index', :as => :my_todos
match 'projects/:project_id/todos/show/:id' => 'todos#show'

から削除:name_prefixしてscopeに追加:asしましたresource

4

0 に答える 0