2010-07-23 9 views
1

J'essaie d'utiliser des contrôleurs imbriqués qui ont un chemin reposant, de sorte que je suis tout organisé et ainsi de suite. Voici une copie de mon routes.rb jusqu'à présent:Rails espaces de noms reposants, ressources ... newbie question

map.root :controller => "dashboard" 

    map.namespace :tracking do |tracking| 
    tracking.resources :companies 
    end 

    map.namespace :status do |status| 
    status.resources :reports 
    end 

Liens vers les enfants chemins de contrôleur fonctionnent bien en ce moment,

<%= link_to "New Report", new_status_report_path, :title => "Add New Report" %> 

Mais mon problème a suivi quand j'ai essayé de la carte juste index de contrôleur parent chemin.

<%= link_to "Status Home", status_path, :title => "Status Home" %> 

Je finissent par obtenir quand je charge la page avec le lien:

undefined local variable or method `status_path' 

-ce que mes itinéraires correctement définis pour ce type de lien?

MISE À JOUR: Je dois ajouter qu'aucune donnée n'est associée au contrôleur «status» parent. Il agit simplement comme espace réservé de catégorie pour le reste des contrôleurs associés aux statuts, par exemple: les rapports.

Répondre

0

Si vous souhaitez que/status passe au contrôleur d'état, il doit s'agir d'une ressource et non d'un espace de noms. Vous imbriquez des ressources de la même manière:

map.resource :status do |status| 
    status.resources :reports 
end 
+0

peut-être que je suis confus sur ce qu'est un espace de noms est, mais ma catégorie « statut » n'a pas de données directement associées. C'est juste une catégorie d'espace réservé pour l'organisation. Ce que j'essaie de faire, c'est juste de rendre une page d'atterrissage pour cette catégorie avec des liens vers des choses comme des rapports, etc. – Dan

+0

Une ressource n'a pas besoin d'avoir de données associées. Si vous voulez qu'il y ait une page à "/ status", vous devez l'acheminer quelque part. Si vous voulez garder vos routes reposantes, vous devriez créer un StatusesController et faire du statut une ressource singulière comme ci-dessus. Alors/status ira à la méthode show de StatusesController. D'autre part, parfois les applications auront un PagesController pour toutes les pages qui ne correspondent pas bien aux routes de ressources, vous pouvez l'acheminer comme 'map.status"/status ",: controller =>: pages,: action => : status' – mckeed

0

Un espace de noms n'est pas une ressource.

map.resources :statuses do |status| 
    status.resources :reports 
end 

Votre appel à status_path a également besoin d'un ID.

status_path(:id => @status.id)

ou

status_path(@status)

+0

bien que mon statut ne soit pas une ressource, les rapports sont. il n'y a pas une telle chose dans mon projet comme un identifiant de statut. – Dan

+0

Ensuite, s'il vous plaît mettez à jour votre message afin que la question mentionne ce que vous essayez d'accomplir avec "status_path". – jdl