Confounding URL typists since 2007.
I just pushed version 0.5.2 of MetaWhere after some , adding the debug_sql method. What’s the difference between debug_sql and to_sql, you ask?
While the to_sql method is a handy way to show your query, but as I’ve written about before, it has its shortcomings. When your query is going to eager load some records and has conditions referencing the eager loaded tables, ActiveRecord changes its generated query, but to_sql is none the wiser. Enter debug_sql:
ruby-1.9.2-head > Article.includes(:comments).where(:comments => {:body => 'hey'}).to_sql
=> SELECT "articles".* FROM "articles" WHERE ("comments"."body" = 'hey')
#
# LIES!!!
#
ruby-1.9.2-head > Article.includes(:comments).where(:comments => {:body => 'hey'}).debug_sql
=> SELECT "articles"."id" AS t0_r0, "articles"."title" AS t0_r1,
"articles"."body" AS t0_r2, "articles"."created_at" AS t0_r3,
"articles"."updated_at" AS t0_r4, "articles"."lookup_id" AS t0_r5,
"comments"."id" AS t1_r0, "comments"."article_id" AS t1_r1,
"comments"."body" AS t1_r2, "comments"."created_at" AS t1_r3,
"comments"."updated_at" AS t1_r4
FROM "articles" LEFT OUTER JOIN "comments"
ON "comments"."article_id" = "articles"."id"
WHERE ("comments"."body" = 'hey')
# The (ugly) truth!