http://code.google.com/p/rquerypad/
Simplify query options with association automation and improve inner
join for activerecord of rails
Feature
- single name string decribe associations
- support to mix inner join and outer join with any order
- auto remove duplicated joins from other association in different
depth - support :conditions, :order, :group
- auto merge to original :include, :joins
Install
ruby script/plugin install
http://rquerypad.googlecode.com/svn/trunk/rquerypad
Example
suppose the asscociations of User ↔ Thread ↔ Reply is 1:N:N
@users = User.find(:all, :group => [“threads.created_at”, “name”])
generate:
[:all, {:group=>“threads.created_at, users.name”, :include=>[:threads]}]
@users = User.find(:all, :conditions => [“threads_.replies.title = ?”,
“rquerypad”])
generate:
[:all, {:inner_joins=>[“threads”], :conditions=>[“replies.title = ?”,
“rquerypad”], :include=>[{:threads=>:replies}]}]
#note: the :inner_joints is processed by rquerypad before sending sql to
database
@users = User.find(:all, :conditions => [“threads.replies.title = ? and
threads.id = ?”, “rquerypad”, 1])
generate:
[:all, {:conditions=>[“replies.title = ? and threads.id = ?”,
“rquerypad”, 1], :include=>[{:threads=>:replies}]}]
#note: single “threads” was removed from includes
Usage
put the following code in you initializer
#if you want to print log, use Rquerypad.prepare_with_debug
Rquerypad.prepare
Test
1.Prepare
the test depends on sqlite3 database, the following code should be add
into your database.yml and place rquerypad.rb(copy from test.rb) in
config/environment
rquerypad:
adapter: sqlite3
database: vendor/plugins/rquerypad/test/db.rquerypad
timeout: 5000
2.database migrate
execute the following script
rake migrate
3.start test
execute the following script
rake