SQLRecord

Do you use ActiveRecord::Connection.execute for speed sometimes?

Does it bother you that the results are not mapped to your schema and type-cast as ActiveRecord would?

Well that's what SQLRecord does.

Example

class UserWithAccount < SQLRecord::Base

  with_opts :class => User do
    column :id
    column :user_email, :from => :email
    column :created_at
  end

  with_opts :class => Account do
    column :account_name, :from => :name
  end

  column :account_id, :from => :id, :class => Account

  query do |params|
    [
      "SELECT #{sql_select_columns.join(', ')} " +
      "FROM users INNER JOIN accounts " +
      "ON users.account_id = accounts.id " +
      "WHERE users.id = ?",
      params[:id]
    ]
  end

end

Usage

$ script.console
> a = UserWithAccount.find(:id => 1)
> a[0].created_at.class
=> Time

Contributers

Thanks to Loren Segal for the big code review, and making me aware that sound OO principles are not dead in ruby.

Contributing to sql-record

Copyright © 2011 vWorkApp. See LICENSE.txt for further details.