Desenvolvi aplicativos reais com o Rails e o ASP.NET MVC, mas essa resposta vem com uma ressalva significativa: eu aprendi e desenvolvi com o Rails pré-versão 2, portanto, é perfeitamente possível que eu esteja desatualizado com o meu Trilhos de conhecimento.
Dito isto, não acho que exista algo que possa ser feito com um, mas não com o outro. Dado qualquer conjunto de requisitos para um aplicativo Web, você deve poder criar esse aplicativo - provavelmente de maneira igualmente eficiente - com o Rails ou o ASP.NET MVC.
Existem algumas coisas interessantes que - até onde eu sei - estão disponíveis no ASP.NET MVC, principalmente por causa dos aspectos do C # / .NET. Por exemplo: quando tenho uma página que contém um formulário enviado, eu teria uma Ação que verifica se está lidando com um GET ou um POST para decidir o que fazer:
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 é um exemplo trivial, mas o if request.post?
padrão é extremamente comum no Rails. Para casos não triviais, o código de Ação pode ficar grande e confuso e, muitas vezes, eu gostaria de refatorá-lo em métodos separados de forma limpa. No ASP.NET MVC, posso fazer isso:
public ActionResult Edit() {
// Render my page that has the Edit form
...
}
[HttpPost]
public ActionResult Edit(Foothing foo) {
// Save my Foothing data
...
}
Eu acho que ser capaz de separar de maneira limpa o tratamento de solicitações GET e POST é legal. Sua milhagem pode variar.
A outra coisa que o ASP.NET MVC faz que é super legal (novamente na minha opinião) também está relacionada ao tratamento do formulário POSTS. No Rails, eu tenho que consultar o params
hash para todas as minhas variáveis de formulário. Digamos que eu tenho um formulário com os campos 'status', 'gonkulated', 'invert' e 'disposion':
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
Mas o ASP.NET MVC permite que eu obtenha todos os meus valores de formulário como parâmetros para o meu método Action:
[HttpPost]
public ActionResult Edit(int id, string status, bool gonkulated, bool invert, int disposition) {
...
}
Essas são as duas coisas que eu realmente amei no ASP.NET MVC ou Rails. Eles não são uma razão suficiente para qualquer desenvolvedor sensato ou competente escolher uma estrutura sobre a outra.