I think I like the Unobtrusive JavaScript helpers the most out of the new features. This will really help cleanup our pages and make it easy to switch libraries. Also everything has just generally been fixed/rewritten, kind of like Snow Leopard. Another exciting addition is arel, because out of anything in Rails, I think the associations needed the most work.
IMHO, ActiveRecord sucked the most ... form validations coupled to models, no lazy queries ... and after working with Django's models and Perl's DBIx::Class it was my biggest pain when trying Rails.
I agree with everything. We've been having to use a ton of hacks to make Rails work the way we want it to. I'm going to be ecstatic when I can use all of this goodness in production... Many thanks to everyone that made this release possible!
There's so much goodness in this release it's hard to digest in one setting. They've fixed just about everything I've found frustrating, added some really brilliant new work and elegantly set the framework up for expansion.
A long list of just some of the new goodness is listed here:
Does anyone know what exactly is meant by the claim that the new Active Record is, "built on top of relational algebra", particularly in light of the fact that not even RDBMS are strictly relational algebra?
I tried it out, but it doesn't seem to be working with Mongrel/thin yet (the most popular web application servers) so I haven't been able to get a good picture yet.
Yeah. They don't even start with rails 3 installed with an error of missing required files. I even tried reinstalling mongrel/thin. No luck. Why was that original post voted down?
At the very least the unobtrusive javascript helpers. It's easy to imagine that all web frameworks will come to a kind of protocol modeled on the efforts of the rails core team here. This will mean that you can use any JS framework ( Prototype, jQuery, Moo, Google Closure, Ext ) and simply add a few lines of shim code that correctly reworks the tags to their AJAX equivalents when it encounters the correct data- tags. It's a brilliant abstraction.
Fair enough. It doesn't have to be helpers. It could become the standard way of writing active ajax elements. Typing out <a href="/stuff" data-remote="true">more</a> is pretty efficient even by hand.
I've been arguing about this for years; my view is that people should actually learn and write JavaScript rather than demand the framework write it for them automatically. Refusing to learn a key technology of the web platform isn't an attitude I'd like to encourage.
Some samples of my reasoning and the times I've argued it with people:
Yes you have a point. But otoh, the history of software has been one of more and more abstraction and code generation. This argument can be made (not saying you are making it) to say something like "People should actually learn and use Assembler than demand that their C compiler do it for them. Refusing to learn a key technology of Computing is not something that I'd like to encourage".
Many languages generate C code. Should everyone learn C because it is a foundational language? (and it is a foundational language). Do you insist all Django users learn C? Why not?
It is ok to have a choice of learning Javascript or not. Just like people have the choice to learn Assembler or have it generated for them. To learn C or have it generated for them.
And framework devs have the freedom to choose whether their framework supports javascript code generation or not. There aren't really any good or evil choices. Rails is cool. Django is, too (I prefer Django fwiw).
Gotcha. That's a pretty reasonable position to take.
Personally, I've written my own "let's see if xmlhttprequest exists, otherwise, do the thing ie needs" ajax handlers, I've written a bunch of SQL, and all that other fun foundational stuff. So I'm really glad that I can just not worry about that and use what's already written, because it's pretty much what I would write anyway. And my snarky reply to 'stfu, write your own' is "Why aren't you coding in machine code, then? Your compiler/interpreter is just hand holding!"
But if I didn't already know it, it'd be easy to cripple myself by never bothering to learn.
(Also, I've been writing my own javascript, even within rails, because I prefer jQuery to prototype.)