プラグインrquerypad、クエリーパラメータの簡略化による関連クエリー能力の強化


http://code.google.com/p/rquerypad/
現在、rails 2.0、rails 1.2(一部2.0方式のクエリー)をサポートしています(Quakeのテストとアドバイスに感謝します)
Simplify query options with association automation and improve inner join for activerecord of rails
フィールド名には関連情報が含まれており、includeまたはjoinsを追加する必要はありません.
Activerecordはinner joinのみをサポートしていたが、現在はこの制限はない.
svnを使いたくなくて、直接ダウンロードして着くことができます
https://rubyforge.org/projects/rquerypad/
Feature
=======
1. single name string decribe associations
2. support to mix inner join and outer join with any order
3. auto remove duplicated joins from other association in different depth
4. support :conditions,
rder, :group
5. 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

Setup
=======
#to set debug model, in rails initialized script
$RQUERYPAD_DEBUG = true
#to support rails 1.2.6, in rails initialized script, such as environment.rb
#default support rails 2.0
$RQUERYPAD_RAILS = "1.2"
Test
=======
Note: current migrate script works only in rails 2.0
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