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
。