Stories
Slash Boxes
Comments

News for nerds, stuff that matters

Slashdot Log In

Log In

Create Account  |  Retrieve Password

Rails Recipes

Posted by samzenpus on Mon Dec 11, 2006 02:53 PM
from the really-cooking dept.
James Edward Gray II writes "If you have been swept up by the Rails craze or are even just a casual fan, you have probably been waiting for the terrific books to start rolling in. Some early entries, like Agile Web Development with Rails, were very solid but for me greatness arrived with Rails Recipes. For those who are not familiar with it, Rails is a full-stack web application framework, for quickly developing state-of-the-art web applications. Rails Recipes is the latest book on the subject from the Pragmatic Programmers." Read the rest of James's review.


Let me tell you how I discovered Rails Recipes. At the Rails shop I work for, we needed a favorites system for our latest application. When I inherited the task of implementing favorites, I had heard just enough to guess that the new polymorphic associations feature of Rails might be just what I needed. Sadly, I had never even seen an example of their usage. Before leaving work that day, I checked the table of contents to make sure a recipe for what I needed was in there and and bought a combo pack, so the PDF would be waiting for me in the morning. The next day I built the entire favorites system and integrated it into our application with only the book as my guide. Total time for implementation, from cracking the book to a complete solution: just over three hours.

Needless to say, the book had completely won me over by that point. I started sneaking in recipe reads whenever I had a free moment or two and had literally devoured the book in no time. I completely expected it to show me cute AJAX tricks and handle common issues like login code and it certainly does these things. It also covers popular plugins, including Acts as Taggable and Acts as Versioned, as it should. What I didn't expect was for the book to include so many excellent low-flash coding recommendations as well. There are terrific recipes for DRYing up your code in various circumstances, building your own output forms for views, how to use models in migrations even if the files are long gone, integration testing as a DSL, routing methods, code generation, and a whole lot more.

The book has some surprising depth to the Rails insights it provides, not because the recipes are long but more because the topics are well chosen. Even the small "Snack Recipes" generally dive right to the heart of a commonly encountered matter. You get typical solutions and often some tips on how to customize the relevant Rails behaviors. For example, the book covers how to add inflections Rails can use in its singular/plural text transformations and how to tie your own form building classes right into the standard Rails helper methods.

I'm a long time Ruby user and I consider myself fairly knowledgeable with regard to the language, but this book taught me new tricks. I've read the Pickaxe, but for some reason IRb sessions never sunk in for me until this book showed the perfect example of using the on an ActiveRecord model to create a Ruby syntax database shell. The book even taught me some great YAML tricks for use in fixtures and configuration files.

Now I realize I've been gushing a little, so let me to balance it with at least some words of caution. First, this book assumes you know Rails. You will not learn Rails here. This should not be the first Rails book you read, though it does make an ideal second read and daily reference. I should also note that the recipe sections seem pretty arbitrary to me. I expected to find the login discussion in the "Big-Picture Recipes" section and the console tips in "Database Recipes", but they are located elsewhere. This might be a minor challenge for those who try to thumb straight to a recipe, but I've found searching the PDF makes this a non-issue. (The paper version of the book does have nice tabs drawn on the edge of pages to lead you to recipe types though, unrelated to the sections.) Finally, I should note that I've gone hunting in the book for about four work projects now, and found all but one. It didn't cover Acts as Threaded usage. Obviously it is impossible for a single book to answer all your questions about Rails, but a 75% ratio seems like a great start to me!

There are 70 recipes in this book split among user interface, database, controller, testing, big-picture, and email categories. I must stress again though how well these recipes pack in the tips. Don't be at all surprised if you learn an applicable view layer or even pure Ruby trick in a database recipe.

If you are a Rails user, I must recommend you pick up this title immediately. I really believe there is something in here for all.


You can purchase Rails Recipes from bn.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.
+ -
story
This discussion has been archived. No new comments can be posted.
The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
 Full
 Abbreviated
 Hidden
More
Loading... please wait.
  • by Salvance (1014001) * on Monday December 11 2006, @02:57PM (#17198724) Homepage Journal
    I typically dislike the "recipe" books available, as most of them seem to only touch about 10% of what I'm actually interested in. However, this book sounds better, maybe this is because the projects I'd be interested in using Ruby on Rails for are far simpler than most projects I undertake.
  • by Super Dave Osbourne (688888) on Monday December 11 2006, @03:18PM (#17199004)
    Rails has been around for a while, and the books are all pretty good (bought 5, read 5, returned 5)... The only book really worth reading to any seasoned MVC or Morphic programmer is the Getting Started with Rails... The rest are really just rehash on MVC which is so dated we should all look carefully at why Rails is so special to the masses in the first place.
      • Guess who pays for that? The rest of us, with increased prices for the products we buy.

        That's incorrect. The book seller/publisher/author pay for it, with decreased profits. You apparently think the bookseller goes like "Oh, these leeches who return books eat into my profits, so I'll have to increase my book prices to make up for it." But if a book seller could increase profits simply by increasing prices, they would do so anyway, they wouldn't need the leeches as an excuse. By increasing their prices the

        • I would totally agree, at some point the majority of people that buy, keep and DON'T read the book in its entirety actually offset any losses the bookseller could possibly blame on a leech. I for one will keep any book worth keeping. The equivalent is that I actually pay a tax of time, and gas to 'borrow' a book for 'evaluation', which is totally in the policy of the seller. I don't do anything the seller doesn't already figure into their revenue path. See, when I return a book or two (or more) I also u
        • by hal2814 (725639) on Monday December 11 2006, @03:37PM (#17199268)
          The late-90's called. They want their OSS-applies-to-everything philosophy back. Hold on a minute. I have another call... ...Oh, the 90's called again and they want this joke back, too. I have to go now.
  • James' Books (Score:3, Interesting)

    by Super Dave Osbourne (688888) on Monday December 11 2006, @03:21PM (#17199058)
    James is a good guy, and knows his Mac crack. Guys has been alive and well in the community for 3 years, and is a great guy with the Ruby Quiz. Conflicting publisher (or not) his views are almost always well thought out and valid, regardless of how silly and useful the Quiz is :) Glad to see James has a TextMate book coming out with Oreilly. In all, the book itself (the Rails Recipes) is about a 7-8 out of 10 mac strokes.
  • From the review:

    Now I realize I've been gushing a little, so let me to balance it with at least some words of caution. First, this book assumes you know Rails. You will not learn Rails here.

    Actually, I could hardly read your review, since it was so crammed with non-standard jargon (at least, from my perspective as a longtime C++/Java programmer). Lighten up on the Ruby-specific buzzwords, please! "how to use models in migrations", "integration testing as a DSL", "great YAML tricks for use in fixtures", huh???? It's nice that the book taught you how to do those things, whatever they are, but maybe a review should relate these things to more normal (non-Ruby) programmers' experiences in common language somehow.

    • a glossary (Score:5, Informative)

      by sammy baby (14909) on Monday December 11 2006, @04:32PM (#17200072) Journal
      To address your specific areas of confusion:
      • "How to use models in migrations" - Rails uses the "Model-View-Controller" structure for application architecture. It also offers scripts which automate the creation of new models: basically, you type "script/generate model modelname", and it drops in files for model code, unit tests, et cetera. Rails also offers a method for making updates to your application's database schema called "migrations." Every time you generate a new model, it will also create a dummy "migration" into which you can enter the code necessary to update your database, regardless of the specific type of database you're running (Informix, MySQL, Oracle, Postgres...).
      • "Integration testing as a DSL" - In Rails parlance, an "integration test" is a test which spans multiple models, controllers, and views. DSL, or "Domain Specific Langage," is a buzzword which basically means "a language specifically tailored to a certain task." It refers to the phenomenon some that Rails code, especially the integration test code, doesn't really scream "I am a Ruby program" to you - the method calls have evolved to the point where they look like a whole new language perfectly suited for a specific task. (That's the claim, anyhoo.)
      • "Great YAML tricks for use in fixtures - YAML stands for "YAML Ain't Markup Language [yaml.org]." It's a very simple way of representing data structures in text. Rails uses YAML for unit test fixtures: that is, your testing database can be populated with information from YAML files. Interestingly, the test fixtures can have Ruby code embedded directly in the YAML, enabling you to do stuff like iterate over hundreds of similar items. The embedded Ruby code is what makes the "great YAML tricks" possible.


      Hope this helps.
      • Thanks, now please explain:

        Acts as Taggable
        Acts as Versioned
        low-flash coding
        DRYing up your code
        routing methods
        • Re:a glossary (Score:5, Informative)

          by sammy baby (14909) on Monday December 11 2006, @08:21PM (#17202678) Journal
          My pleasure.

          • acts_as_taggable
          • Acts as Versioned - see above, but allows you to have multi-versioned objects, instead of tags.
          • DRYing up your code - slang. DRY stands for "Don't Repeat Yourself." DRYing up your code, therefore, is making sure that you haven't duplicated code unnecessarily.
          • routing methods - methods that govern how a Rails application will choose a controller and method based on a URL. The "default route" in most Rails applications is "controller/method/id", meaning if I were to submit a GET request for "http://railsthingy.net/photos/view/101", the application would attempt to call the "view" method from the "photos" controller, with an argument "id=101".
          • low-flash-coding - this... um. Well. You got me, dude.
          • Doh! Slashdot done ate my lovely explanation of acts_as_taggable.

            In short: "acts_as" calls inform the Rails application that a model should inherit additional functionality from a plugin. The "acts_as_taggable" plugin bolts on the ability to assign arbitrary tags to an object - think Flickr, del.icio.us, or even Slashdot these days. Technically, I believe that acts_as_x uses mixins to work their magic: a mixin is Ruby's version of a Java "interface," basically a way to inherit functionality from multiple s
          • Re:a glossary (Score:4, Informative)

            by number6x (626555) on Monday December 11 2006, @11:04PM (#17203778)
            • low-flash coding - The 'flash' is a small area that keeps things around until the next transaction. You should use it just to pass error messages from a failure of some type. Some programmers try to get tricky and use the flash as a psuedo session. Rails supports sessions fully and you should use the session for your needs. Getting tricky is usually a sign you don't really know what your doing in Rails.
    • Lighten up on the Ruby-specific buzzwords, please! "how to use models in migrations", "integration testing as a DSL", "great YAML tricks for use in fixtures", huh???? It's nice that the book taught you how to do those things, whatever they are, but maybe a review should relate these things to more normal (non-Ruby) programmers

      Most of those _are_ 'normal' terms.

      Models are a fundamental part of the MVC [wikipedia.org] design pattern (which originated in 1979 [ifi.uio.no], so it isn't exactly a rails buzzword!), integration testing [wikipedia.org] is part of general software testing, usually used in combination with unit testing, and YAML [wikipedia.org] is a markup language (sort of). They aren't Ruby or Rails specific.

      Don't assume you know all the 'normal' terms simply because you don't consider yourself a newby. You sound like one of those programers who think they know it all... bo

  • by Anonymous Coward on Monday December 11 2006, @03:34PM (#17199236)
    From the review:
    I started sneaking in recipe reads whenever I had a free moment or two and had literally devoured the book in no time.

    Okay, so what he's saying is he literally ate the book and, moreover, he ate the book in literally 0.000 seconds.

    I conclude the reviewer lacks basic literacy or vocabulary skills. Literally.
    • Re: (Score:2, Funny)

      by Anonymous Coward
      Okay, so what he's saying is he literally ate the book and, moreover, he ate the book in literally 0.000 seconds.

      I conclude the reviewer lacks basic literacy or vocabulary skills. Literally.


      I further conclude that the reviewer was REALLY hungry.

    • No, no, no. He didn't mean "literal" in the literal sense.
  • ...and had literally devoured the book in no time.

    I do not think it means what you think it means.

    Sincerely
    -Inigo Montoya

  • by defile (1059) on Monday December 11 2006, @04:18PM (#17199882) Homepage Journal

    Since I'm already familiar with Python and use it on a daily basis, my experience with Ruby has been pretty limited. This puts Ruby on Rails just out of my reach for a new project.

    Thankfully, there's I guess what you'd call a rough equivalent, Django [djangoproject.com] which is the first framework I've ever used that hasn't frustrated the hell out of me.

    You've got no excuses left, check it out.

    • Re: (Score:3, Interesting)

      Well, there is an excuse left, if you're a PHP programmer looking for a replacement (be that django or rails) -- it's the issue of how to deploy the sucker.

      I might be like some others reading this thread. I'm familiar with PHP and I'd like to switch up to something more elegant.

      But there's a roadblock when it comes to deployment.

      With PHP, it's simple -- your test machine is probably set up already, and your deployment webserver almost certainly is. With Rails and Django, you're in a spot of trouble,

      • It's not trivial to just install "mod" modules to get Rails and Django to work

        But that's exactly what PHP requires!

        and you have to own root permissions to do that.

        True enough. Django and RoR aren't for people who only have cheapo shared web hosting plans.

        I'd sure love to see the folks who are writing the Django book drop whatever chapter they are writing and move on to the deployment chapter.

        They've had instructions [djangoproject.com] since forever. It does require some meddling with the Apache config, but it's not too

      • Okay, I generally try not to make snarky comments, but, with my apologies, please allow me to indulge briefly. :)

        > With PHP, it's simple -- your test machine is probably set up already, and your deployment
        > webserver almost certainly is.

        <snark>Are you FUCKING kidding me?</snark>

        (Golly, I already feel better.) :)

        Now please allow me to expand.

        Deploying for PHP is an insane pain in the ass. PHP breaks compatibility at every turn on the wind (fun fact: the product I'm paid to deploy for a larg
        • Thanks for the comment. It was very informative. I am, in fact, looking into both Rails and Django. I just wish I didn't have to install things (on my own machine) or beg the sysadmin to install things (on a deployment machine) to make test sites.

          In case it's of interest to anyone on the thread, e.g. in case it might inspire an informative comment such as the one to which I am now replying, my preference so far is for Django, partly because I like the "feel" of python, and partly because I like the wa

    • I've heard great things about Django, but this reminds of how many people complain "I don't use it at work, and I can't find the time." I learned Ruby in 2 days, coming from PHP.

      Anyone who can't find the time to learn something that will dramatically increase their productivity should rethink their logic. I would gladly spend a weekend learning something that will make my job easier for years to come.

      The "I don't use it at work" excuse is the same as "I don't like Python's whitespace rules." It's an exc

    • Re: (Score:2, Insightful)

      >This puts Ruby on Rails just out of my reach for a new project.

      Here is the thing you should realize: There are people out there who have never written a line of code in any language,
      who have picked up Rails and put together a webapp on day one. Within a few hours of the first tutorial.

      Lots of people who do graphics and layout, who have historically needed someone else to do the programming for them,
      seem to have discovered Rails -- and are using it rather successfully.

      I have seen this phenomenon with m
  • A couple months ago I needed to search for a list of members that fit into all categories checked by users on a web form. Rails recipes was one of several books that I looked to for a pre-packaged solution, but none seemed to cover complex has_and_belongs_to_many queries where multiple criteria must be met. Ultimately I had to use custom SQL, but being not all the familiar with rails/activerecord I wonder if there is a better way.

    The SQL statement was generated by iterating over the categories checkboxes fr
    • I would look at squirrel [thoughtbot.com] and ez_where [brainspl.at] -- I am not sure if these implement what you're looking for but they're the two plugins I know that can make complicated searching simple.
    • I've been using rails a year and a half, and coding full time in it the last 5 months. Here's my take, off the top of my head.

      The source of your problem is using has_and_belongs_to_many; for you rails outsiders, that is a join table with two columns. has_and_belongs_to_many has fallen out of favor because too many people use it without thinking out the full domain of their problem.

      It sounds like your project really has three models, Member, Category, and the Tag that joins them. When people think of it

    • But a serious, multi-site web-based application that spans continents is going to require something a bit more robust.

      Since I'm always being told to build big things, I just couldn't get into Ruby/Rails.

      Maybe for a personal site or something.
      • But a serious, multi-site web-based application that spans continents is going to require something a bit more robust.

        Is Rails unstable in your experience? Two phase commits are still not implemented in rails IIRC but clustering is possible and done by rails hosting services. Just put session data on the DB so that each request sent to a rails app can be routed arbitrarily to whatever app server is available at the moment.

        I use ROR + postgres on two different platforms, ppc and intel, without a hitch. Didn't try clustering the two yet.

        • Re: (Score:3, Insightful)

          > Because it's not compiled, it seems like it's not a
          > good idea for really large projects either.

          Hm, I think if you're doing a large site - e.g., multiple app servers - the speed at which the language's opcodes are processed won't be the bottleneck. It'll be database queries or the network connections or something like that.

          Anyhow, it's working pretty well for us so far [getindi.com]...
          • A set of apps are deployed on a set of appservers, and each app is given a classification which determines how important it is. CPU is at a premium in this environment, and a CPU-hog would be robbing the other applications.

            I suppose in a traditional environment you'd just throw more servers at it, but I've never like that idea. The administrative costs in a high-avail datacenter are not to be sneezed at!
            • > A set of apps are deployed on a set of appservers, and
              > each app is given a classification which determines how
              > important it is. CPU is at a premium in this environment,

              Really? I mean, sure, you don't want something to get caught in a tight loop and burn up cycles, but is the difference between a Ruby app and a Java app really that much? Anything involving bit-shifting or really dense math can be rewritten in C... I guess I just don't see the problem.

              > The administrative costs in a high-ava
        • MVC is good for any project but the most simple things.

          You start coding a web app you need, 3 DB tables. You normalize the db and add couple things you didn't think about in advance, 10 tables. Oh, login and permission data, at least other three. At least three web templates.

          Barely one man month after, your app is mature beta and you already gained from having started with MVC. I'd add, if your code has not implemented at least some MVC-like separation you are already swimming in spaghetti.

          In soviet PHP lan
        • by resonantblue (950315) on Monday December 11 2006, @04:17PM (#17199868)

          Because it's not compiled, it seems like it's not a good idea for really large projects either.
          You wanna bet? Look at 37signals which successfully runs large projects on Rails. It's not compiled, but neither is PHP. Since Rails runs as a persistent app, in a production environment, it only loads most of the application into memory once. At that point, in all practicality, you will hardly ever run into performance bottlenecks that can't be fixed by scaling out.

          Admittedly, Rails debugging tools cannot compare to those of .NET or J2EE, but the issue of being compiled will hardly ever come up in practicality.

          really couldn't find any reason why I'd want to use it above PHP
          Cause it's a fully integrated framework. Try using plain, vanilla PHP and see how much boilerplate code you write to connect to your database, to retrieve data, to implement Ajax. Then tell me how easy it keep your code clean and modularized when you start to build up your site. And don't even get me started on building automated tests into your application. I used use PHP exclusively, but I've never looked back.

          As a side note, there are some frameworks in PHP now that can compare to the Rails way of doing things (like CakePHP or Symphony). I still prefer Ruby as a language, but those frameworks seem pretty decent. However, I don't think you can compare pure vanilla PHP to Rails.

          Here's why I didn't like it. If your building a small project, the model-view-controller thing can get really annoying, with the needing of 3 files for a single web page thing.
          Yeah, the whole thing about writing good, clean code is pretty annoying. If you're ok with writing shitty code, then by all means, don't ever use Rails :-)

          -Aamer
          • There are two kinds of programmers - Those who understand the following quote, and those who don't:

            "Premature optimization is the root of all evil (or at least most of it) in programming."
            -Donald Knuth
            • Re: (Score:3, Insightful)


              "Premature optimization is the root of all evil (or at least most of it) in programming."
              -Donald Knuth


              Well I'd counter with "thinking you can always optimize later is the root of Open Office"
        • by smallpaul (65919) <paul&prescod,net> on Monday December 11 2006, @04:17PM (#17199876)
          What makes you think that software needs to be "compiled" for large projects? Yahoo is primarily delivered with PHP. Amazon.com is largely Perl. MySpace is largely ColdFusion (migrating to .NET). Yahoo: http://www.internetnews.com/dev-news/article.php/1 491221 [internetnews.com] Amazon: http://en.wikipedia.org/wiki/Mason_(Perl) [wikipedia.org] MySpace: http://www.tomasbecklin.com/cf/ [tomasbecklin.com]
        • by misleb (129952) on Monday December 11 2006, @04:22PM (#17199928)
          If your building a small project, the model-view-controller thing can get really annoying, with the needing of 3 files for a single web page thing.


          Single web page? That isn't a small project... that is a TINY project.

          Because it's not compiled, it seems like it's not a good idea for really large projects either.


          So you don't see any applications somewhere between a tiny project and a large enterprise application? Seems to me that most applications fit in this area. Blogs, forums, CMS, all kinds of things. An intranet is a great place for rails apps.

          I really couldn't find any reason why I'd want to use it above PHP,


          For one thing, PHP is an ugly language with a hacked together object system and terrible function naming. Ruby blows PHP away as far as scripting languages go. And then add Rail on top of it which totally takes advantage of Ruby's features.

          I did PHP for a while, but after writing an app in Rails for first time, I didn't want ot touch another line of PHP again. If I need to throw some simple dynamic content on a website, I'll resort to PHP because it is so readily available, but beyond that, forget it. I won't waste my time.

          and it doesn't really have the qualities needed to take on something like Java or .Net.


          You fail to see the huge space between PHP and Java.

          -matthew
        • You're annoyed by having to modify 3 files; your opinion does not count. You say compiled code is better, then cite Java, PHP, and .NET, all of which run on a VM; your opinion does not count. You prefer PHP; your opinion does not count, you have no taste, and you're insane.
        • I tried ruby on rails, although I didn't give it much of a chance. Here's why I didn't like it. If your building a small project, the model-view-controller thing can get really annoying, with the needing of 3 files for a single web page thing. Because it's not compiled, it seems like it's not a good idea for really large projects either. What is the big draw of ruby on rails? I really couldn't find any reason why I'd want to use it above PHP, and it doesn't really have the qualities needed to take on someth
            • A technology like Rails threatens to make "programmers" obsolete, at least in certain segments of the killer-app domain that is "webapps."

              I feel as threatened by Rails making me obsolete, as I do feel threatened by Lego Logo.

              People who were never able to write programs in, say, CGI, PHP, or servlets/JSP, are writing Rails apps without much difficulty.

              Thanks for the propaganda, but I'd like to see actual examples to acknowledge this as anything other than completley disconnected from reality BS.

              It's a lot ea
        • What is the big draw of ruby on rails? I really couldn't find any reason why I'd want to use it above PHP

          No offense, but I'd be drawn to any alternative just to get off of PHP...
        • Re: (Score:3, Interesting)

          There is no silver bullet, and rails is not for everything. David Heinemeier Hansson, the creator, repeatedly says this.

          PHP is great for simple web pages. The Rails homepage is written in PHP (which is fine, as I wouldn't expect a webpage about assembly to be written in assembly). PHP is great for web designers. Rails is great for software engineers.

          If you spent more than a cursory glance on rails, you'd know you don't need 3 files for every page. Your controller is shared among all your pages. But regard

      • Re: (Score:2, Insightful)

        The parent is right now modded funny. Actually I believe he's right on target. Rails _is_ slow. Very slow. Compared to whatever other framework / language you might be wanting to implement your web applications in. That is executing a Rails app is slow.

        The development time on the other hand is amazingly short. You can go from zero to app in times you would only dream of coming from a PHP or Java world. I personally can only vouch for PHP, but there's plenty of Java people out there who will tell you the sam
        • Grails is used. It is faster that RoR, and unlike Rails, they are targetting all scales of application, from the smallest to the enterprise scale. Also, it avoids the ActiveRecord pattern, allowing easy database independence, and allowing you to define your data model in classes, rather than having to work with database schemas (although you can do that too).