Questions Ruby on Rails skeptics ask

[UPDATE: My example for the issue of Rails generating too much database traffic was actually incorrect for Rails v1.0. Luckily, v1.1 introduced bottomless eager loading, which addresses it. I’ve revised the example below.]

If you have been following anything related to web development at all, you have at least heard of Ruby On Rails. If you’re like me, it makes you want to take a flying leap into developing with it. For personal projects there’s nothing to hold you back. However, if you decide to recommend using Rails with a team that doesn’t know much about it, you may run into some questions. If you don’t have some ready answers, the idea will most likely be shot down quickly and left in the dust.

I don’t like using ‘id’ as my primary key name.

Rails is written to expect the field ‘id’ as the primary key to any typical table. Therefore, ‘id’ in a users table would refer to a user id just as ‘id’ in a product table would refer to a product id.

The important thing to know in order to combat this issue is to that while ‘id’ is highly recommended as a primary key, it’s definitely not required. Here’s an example of creating a User model in rails, but telling it that the primary id is UserID instead of ‘id’.

class User < ActiveRecord::Base
  set_primary_key "UserID"

In addition, by naming your own primary key, you need to assign it a unique value prior to saving anything new to the database. Rails can’t assume your new field is auto-generating or not, so it leaves it up to you to set.

My legacy data doesn’t use that naming scheme.

While you are free to use any naming scheme you want, Rails is definitely built to work with its preferred naming scheme. The main thing to keep in mind, in addition to dealing with how Rails works with your primary keys, is you may have to add code to inform your objects how they are related to each other via the database. You could also lose out on automated functionality like Rails ability to automatically take care of fields like created_at.

Rails generates too much database server traffic.

Some people are quick to say Rails makes way too many database calls when you have a number of objects related to each other in one-to-many or many-to-many relationships. This is because Rails does not load data into objects until they are referenced.

For example, if you have an Order and LineItem object where an Order can have many LineItems which in turn are linked to Products you could have something similar to the following code.

for order in Order.find(:all)
  puts "Item ordered: #{order.line_item.product_id}
  puts "Description: #{order.line_item.product.description}

In this example, there would be one database call for the main order, then two calls to retrieve the line item information then the product description. Here’s a much better approach.

for order in Order.find(:all, :include => {:line_items => {:product}})
  puts "Item ordered: #{order.line_item.product_id}
  puts "Description: #{order.line_item.product.description}

Very similar code, but in the latter version the :include attribute tells Rails to preload the line items and products, so it loads up everything in one database call rather than multiple ones. You also have the option of using the find_by_sql function to specify your own custom call.

It’s difficult to find hosting

Finding a host isn’t much of an issue if you have your own server, but if you’re looking for a shared host, not every host offers it. The number grows steadily, though. TextDrive is a leader in Ruby on Rails hosting, but you can find a growing number of hosts on the Ruby on Rails website.

What about performance

Another frequest concern about Rails is about it’s performance and ability to scale. While some think it may be good for small and possibly mid-sized projects, it doesn’t have what it takes for large scale applications. A lot of this is just knee-jerk reaction. The great thing about the Rails community is that there is constant work on making things better.

RailsExpress is one website that is focused on Rails performance. In addition to a lot of benchmarks, it also includes a lot of tips for making Rails apps perform better.

TextDrive also has a weblog which has some of their experiences being a host for Rails apps. Optimizing Rails Resource Usage is one and I’m sure they’ll post more.

Just as you’d expect with any framework and language, the better the code you write, the more efficient it will run.

Have other questions?

There’s a number of great places to find more information on how Rails works. A number can be found on the Rails webpage for documentation. The Ruby on Rails API documentation is the most up-to-date resource since it is actually generated from the code itself although it’s more like looking up things in a dictionary.

For a more hands-on, descriptive resource you should really have the book Agile Web Development with Rails. I have to warn you that the first part of the book will get you ready to tear into your first application, but the juiciest information is in the latter part which goes into more details about the underlying Rails framework.

Commenting has expired for this post.