2010-09-23 6 views
0

Je voudrais avoir une URL comme ceci:Rails: ressources pour les URL non orthodoxes?

/Paie/région/1

et je voudrais à la carte pour les tâches de la fonction de contrôleur de payroll_list. J'aimerais aussi utiliser REST. Quelle est la meilleure façon de faire cela?

Merci beaucoup!

Répondre

1

Eh bien, je vous conseille de suivre la convention de Rails. Si vous insistez toujours sur l'utilisation de ces URL «étranges» et que vous voulez ignorer les problèmes/maux de tête que cela peut créer lors du développement, essayez d'utiliser Refraction. Je ne veux pas être impoli mais actuellement, il me semble que vous ne compreniez pas pourquoi les URL reposantes sont comme elles sont. S'il vous plaît, comprenez d'abord la conception derrière ce concept, puis repensez votre application/contrôleur et votre conception de routage. Je parie que vous serez éclairé. Dans cet exemple, votre URL devrait probablement être /regions/1/payrolls avec map.resources :regions, :has_many => :payrolls. Ensuite, votre liste de paie serait rendue par le PayrollsController ayant un params[:region_id] - et cela a du sens (et probablement ce que vous avez essayé de réaliser avec votre mise en page d'URL). Extrait de code:

def index 
    if params[:region_id] 
    @region = Region.find(params[:region_id]) 
    @payrolls = @region.payrolls 
    else 
    @payrolls = Payroll.all 
    end 
end 

Si vous voulez toujours avoir une ressource sous une URL différente du nom, utilisez ce qui suit:

map.resources :regions do |regions| 
    regions.resources :tasks, :as => :payrolls 
end 

Cela cartographier les ressources imbriquées au contrôleur de tâches à l'aide de la partie URL du nom "salaires". Mais cela ne fonctionne probablement pas comme vous pouvez vous y attendre car une logique reposante signifie que vous devez gérer le modèle de paie dans le PayrollsController. Sinon, vous pourriez rencontrer un code étrange. Peut-être que votre conception de la TasksController est juste faux? Rails s'attendra probablement à ce que les tâches soient transférées à votre contrôleur de tâches bien que vous le nommez les paies. Cela peut être déroutant au moins (cependant, il ne s'attend pas réellement à ce que ces modèles soient des tâches, donc cela fonctionnera probablement). «Repos» signifie également que votre application doit répondre aux verbes standard d'une ressource, et pas seulement utiliser des routes «ingénieuses». Il s'agit aussi des verbes http GET, PUT, DELETE et POST, et bien sûr des actions par défaut "edit", "new" etc. N'essayez pas de rendre vos contrôleurs gros et compliqués. Suivez la devise "contrôleurs skinny - gros modèles".

+0

Vous voyez? Je savais que quelqu'un pourrait m'aider avec ça! : D C'est juste ce que je cherche. Je vous remercie! –

+0

P.S. - Oui, j'ai besoin de relire cette documentation. Il y a beaucoup de choses que je dois relire. Juste besoin de terminer ce projet actuel. (Merci encore) –

+0

Oh, attends ...Que dois-je faire si je veux que l'URL contienne une "paie", mais utilise-t-elle le contrôleur de tâches pour les demandes de paie? –

0

OK, donc une meilleure question, peut-être ceci:

Comment puis-je obtenir pour que j'utiliser votre suggestion:

/régions/1/paie

et ont cette carte RESTfully à:

Tâches contrôleur avec index, nouveau, etc qui sont préfixés par "payroll_"?

Comme ceci: TasksController # payroll_index ou TasksController # payroll_new

+0

mappage à i.e./regions/1/payroll/new etc –

+0

Ce n'est pas ce qui devrait être fait ... C'est totalement contraire aux décisions de conception habituelles au sein de Rails. On dirait que vous voulez une sorte d'encapsulation, donc vous pourriez vouloir considérer les espaces de noms. Lisez à ce sujet. – hurikhan77

Questions connexes