以下のようなモデルがあります(適当に考えたんですが、SNS的な何かを想定してみましょう)。

1
2
3
4
5
6
7
8
9
10
11
12
class Post < ActiveRecord::Base
  belongs_to :member
end
 
class Member < ActiveRecord::Base
  belongs_to :job
  has_many :posts
end
 
class Job < ActiveRecord::Base
  has_many :members
end

「日付が2010年2月6日で、かつ書いた人の職業名が”Engineer”の人の日記一覧を抽出したい」んですけど、どうしましょう。なお、date属性はPostクラスに、job_name属性はJobクラスにくっついています。

なので、以下では全然ダメです。

1
2
3
4
5
6
Post.find(:all,
  :conditions => {
    :date => Date.new(2010, 2, 6),
    :job_name => "Engineer"
  },
  :include => {:member => :job})

SQL (0.2ms) SET NAMES 'utf8'
SQL (0.6ms) SET SQL_AUTO_IS_NULL=0
Post Load (0.0ms) Mysql::Error: Unknown column 'posts.job_name' in 'where clause': SELECT * FROM `posts` WHERE (`posts`.`date` = '2010-01-31' AND `posts`.`job_name` = 'Engineer')

Read the rest of this entry »