Я разработал реальные приложения как с Rails, так и с ASP.NET MVC, но этот ответ приходит со значительным предостережением: я изучил и разработал с Rails до версии 2, так что вполне возможно, что я сильно устарел с моими Рельсы знания.
При этом, я не думаю, что есть что- то, что можно сделать с одним, но не с другим. Учитывая любой набор требований к веб-приложению, вы должны иметь возможность создавать это приложение - возможно, одинаково эффективно - с помощью Rails или ASP.NET MVC.
Есть несколько интересных вещей, которые, насколько мне известно, доступны в ASP.NET MVC, главным образом, из-за аспектов C # / .NET. Например: когда у меня есть страница, которая содержит отправленную форму, у меня будет действие, которое проверяет, имеет ли дело GET или POST, чтобы решить, что делать:
def edit
@item = Item.find(params[:id])
if request.post?
@item.update_attributes(params[:item])
redirect_to :action => 'edit', :id => @item.id
end
end
Это тривиальный пример, но if request.post?
шаблон очень распространен в Rails. В нетривиальных случаях код Action может стать большим и запутанным, и часто мне хотелось бы, чтобы я мог аккуратно преобразовать его в отдельные методы. В ASP.NET MVC я могу сделать это:
public ActionResult Edit() {
// Render my page that has the Edit form
...
}
[HttpPost]
public ActionResult Edit(Foothing foo) {
// Save my Foothing data
...
}
Я думаю, что возможность четко разделять обработку запросов GET и POST - это здорово. Ваш пробег может варьироваться.
Другая вещь, которую ASP.NET MVC делает это очень круто (опять же на мой взгляд), также связана с обработкой формы POSTS. В Rails я должен запросить params
хеш для всех моих переменных формы. Допустим, у меня есть форма с полями «status», «gonkulated», «invert» и «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
Но ASP.NET MVC позволяет мне получать все значения форм в качестве параметров для моего метода Action:
[HttpPost]
public ActionResult Edit(int id, string status, bool gonkulated, bool invert, int disposition) {
...
}
Это две вещи, которые мне очень понравились в ASP.NET MVC или Rails. Они не являются достаточной причиной для того, чтобы любой здравомыслящий или компетентный разработчик выбрал одну платформу вместо другой.