2010-12-15 95 views
1

J'ai construit une application Ruby on Rails (2.3.8) qui permet aux utilisateurs de suivre leurs entraînements. En outre, si un utilisateur est un propriétaire de salle de sport, ils peuvent créer un gymnase (dans mon cas appelé une boîte) dans mon application. Une case filtre l'activité sur l'ensemble du site pour les membres de cette case (accomplissement par le biais d'une association d'appartenance, mais ce n'est pas important pour cela).Mappage d'une nouvelle vue à une ressource existante ... comment créer/resource/number/foobar?

Une boîte vit dans une boîte de ressources et est accessible dans mon application à/boxes/14 comme on pouvait s'y attendre. Je veux maintenant créer un leaderboard pour chaque boîte qui idéalement vivrait à /boxes/14/leaderboard et seulement l'activité d'affichage de la boîte 14 (bien sûr 14 est un nombre d'exemple). Le leaderboard n'a pas besoin d'être une ressource complète car je filtre simplement l'activité via named_scopes.

Pour une raison quelconque, je n'ai pas rencontré une situation comme celle-ci auparavant. Quel est le meilleur moyen d'accomplir ceci dans le cadre? J'ai essayé de créer une méthode dans le boxes_controller et mappant la route à /boxes/leaderboard mais bien sûr cela cherche un Box avec id = leaderboard.

Des idées? Ou est-ce que je manque quelque chose de fondamental ici?

Répondre

1

Je pense que le moyen le plus simple serait d'ajouter une route de membre pour ce scénario. Ajouter quelque chose comme ceci dans votre routes.rb:

map.resources :boxes, :member => { :leaderboard => :get } 

Cela se traduira par une voie supplémentaire qui ressemble à ceci:

leaderboard_box GET /boxes/:id/leaderboard {:controller=>"boxes", :action=>"leaderboard"} 

Et qui sera mis en déroute à une action leaderboard appelée dans le BoxesController.