He desarrollado aplicaciones reales con Rails y ASP.NET MVC, pero esta respuesta viene con una advertencia importante: aprendí y desarrollé con Rails anteriores a la versión 2, por lo que es muy posible que esté muy desactualizado con mi Rieles de conocimiento.
Dicho esto, no creo que no hay nada que se pueda hacer con uno pero no el otro. Dado cualquier conjunto de requisitos para una aplicación web, debería poder construir esa aplicación, probablemente de manera igualmente eficiente, con Rails o ASP.NET MVC.
Hay un par de cosas interesantes que, que yo sepa, están disponibles en ASP.NET MVC principalmente debido a aspectos de C # /. NET. Por ejemplo: cuando tengo una página que contiene un formulario que se envía, tendría una Acción que verifica si se trata de un GET o un POST para decidir qué hacer:
def edit
@item = Item.find(params[:id])
if request.post?
@item.update_attributes(params[:item])
redirect_to :action => 'edit', :id => @item.id
end
end
Este es un ejemplo trivial, pero el if request.post?
patrón es extremadamente común en Rails. Para casos no triviales, el código de acción puede volverse grande y desordenado y, a menudo, desearía poder refactorizarlo en métodos separados limpiamente. En ASP.NET MVC puedo hacer eso:
public ActionResult Edit() {
// Render my page that has the Edit form
...
}
[HttpPost]
public ActionResult Edit(Foothing foo) {
// Save my Foothing data
...
}
Creo que es capaz de separar limpiamente el manejo de las solicitudes GET y POST. Su experiencia puede ser diferente.
La otra cosa que ASP.NET MVC hace que es súper genial (nuevamente en mi opinión) también está relacionada con el manejo de POSTS de formulario. En Rails, tengo que consultar el params
hash para todas mis variables de formulario. Digamos que tengo un formulario con los campos 'estado', 'gonkulated', 'invert' y '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
Pero ASP.NET MVC me permite obtener todos mis valores de formulario como parámetros para mi método de acción:
[HttpPost]
public ActionResult Edit(int id, string status, bool gonkulated, bool invert, int disposition) {
...
}
Esas son las dos cosas que realmente me encantaron de ASP.NET MVC o Rails. No son razón suficiente para que un desarrollador cuerdo o competente elija un marco sobre el otro.