J'ai développé de vraies applications avec Rails et ASP.NET MVC, mais cette réponse comporte une mise en garde importante: j'ai appris et développé avec la version 2 de Rails antérieure à la version 2, il est donc tout à fait possible que je sois totalement obsolète Rails connaissance.
Cela étant dit, je ne pense pas que l'on puisse faire quelque chose avec l'un mais pas avec l'autre. Si vous avez un ensemble d'exigences pour une application Web, vous devriez pouvoir créer cette application - probablement avec la même efficacité - avec Rails ou ASP.NET MVC.
À mon avis, il existe quelques fonctionnalités intéressantes disponibles dans ASP.NET MVC, principalement en raison de certains aspects de C # / .NET. Par exemple: quand j'ai une page contenant un formulaire soumis, j'aurais une action qui vérifie si elle traite d'un GET ou d'un POST pour décider quoi faire:
def edit
@item = Item.find(params[:id])
if request.post?
@item.update_attributes(params[:item])
redirect_to :action => 'edit', :id => @item.id
end
end
Ceci est un exemple trivial, mais le if request.post?
motif est extrêmement répandu dans Rails. Pour les cas non triviaux, le code d'action peut devenir volumineux et compliqué, et souvent, je souhaiterais pouvoir le reformuler proprement dans des méthodes séparées. Dans ASP.NET MVC, je peux le faire:
public ActionResult Edit() {
// Render my page that has the Edit form
...
}
[HttpPost]
public ActionResult Edit(Foothing foo) {
// Save my Foothing data
...
}
Je pense que pouvoir séparer proprement le traitement des demandes GET et POST est très bien. Votre kilométrage peut varier.
L'autre chose que ASP.NET MVC fait qui est super cool (encore une fois à mon avis) est également liée à la gestion des formulaires POSTS. Dans Rails, je dois interroger le params
hachage pour toutes mes variables de formulaire. Disons que j'ai un formulaire avec les champs 'statut', 'gonkulated', 'invert' et 'disposition':
def edit
@item = Item.find(params[:id])
if params[:status] == "new"
...
else
...
end
if params[:gonkulated] == "true"
...
else
...
end
if params[:invert] == "true"
...
else
...
end
# Rest ommited for brevity
end
Mais ASP.NET MVC me permet parfaitement d’obtenir toutes mes valeurs de formulaire en tant que paramètres de ma méthode Action:
[HttpPost]
public ActionResult Edit(int id, string status, bool gonkulated, bool invert, int disposition) {
...
}
Ce sont les deux choses que j'ai vraiment aimé avec ASP.NET MVC ou Rails. Ils ne constituent pas une raison suffisante pour qu'un développeur sain d'esprit ou compétent puisse choisir un framework plutôt qu'un autre.