azazel
September 18, 2010, 10:12pm
1
Witam,
Mam model Product, który może mieć wiele komentarzy Comment. Dla produktów routing oparty o zasoby działa normalnie, problem pojawia się gdy chcę zagnieździć komentarze. Chciałbym, aby dla komentarzy zasób był nazwany “komentarze”, jednak dostaję błąd o nieistnieniu podanej trasy. Na przykładzie wygląda to tak:
to działa
http://localhost:3000/produkty/73/comments
to nie działa
http://localhost:3000/produkty/73/komentarze
No route matches "/produkty/73/komentarze" with {:method=>:get}
Tablica routingu dla podanych kontrolerów:
[code]map.resources :products,
:as => ‘produkty’,
:collection => {
:manage => [ :post, :get, :delete, :put ],
:perfumes => :get
},
:path_names => {
:manage => ‘zarzadzanie’,
:perfumes => ‘perfumy’
},
:has_many => [ :comments ]
map.resources :comments,
:as => 'komentarze',
:collection => { :manage => [ :post, :get, :delete, :put ] },
:path_names => { :manage => 'zarzadzanie' }[/code]
Zapewne trzeba byłoby dodać opcję :as => ‘komentarze’ w :has_many => [ :comments ], jednak problem w tym jak?
phocke
September 18, 2010, 10:41pm
2
map.resources :products, :as=>'produkty' do |pro|
pro.resources :comments, :as=> 'komentarze'
end
mniej więcej tak,
oczywiście inne opcje też musisz podać, ale schemat juz znasz
azazel
September 19, 2010, 12:55am
3
Tak, wiem o takiej możliwości, ale właśnie jak i gdzie podać resztę opcji, które są w :products i :comments?
phocke
September 19, 2010, 1:00pm
4
bardzo prosto
map.resources :users, :has_many => [:invitations], :member => {
:unconfirmed_email => :get,
:confirm_email => :get,
:contact_importer => :get } do |user|
user.resources :conversations
user.resources :task_lists do |task_lists|
task_lists.resources :tasks
end
user.show_more 'activities/users/:id/show_more.:format', :controller => 'activities', :action => 'show_more', :method => :get
end
Wzięte z Teamboxa bo akurat nie chciało mi się pisać.
Teambox::Application.routes.draw do
# If secure_logins is true, constrain matches to ssl requests
class SSLConstraints
def self.matches?(request)
!Teambox.config.secure_logins || request.ssl?
end
end
resources :sites, :only => [:show, :new, :create]
match '/public' => 'public/projects#index', :as => :public_projects
namespace :public do
match ':id' => 'projects#show', :as => :project
match ':project_id/conversations' => 'conversations#index', :as => :project_conversations
match ':project_id/conversations/:id' => 'conversations#show', :as => :project_conversation
match ':project_id/:id' => 'pages#show', :as => :project_page
end
This file has been truncated. show original
Lepiej?