X is not missing constant Y

Railsで階層化されたモデルの関連レコードのセッターメソッドを使用すると「X is not missing constant Y」というエラーが発生する。

# 以下のモデルがあったとして
# models/hatena/diary.rb
# models/hatena/comment.rb

class Hatena::Diary < ActiveRecord::Base
  has_many :comments
end

class Hatena::Comment < ActiveRecord::Base
  belongs_to :diary
end

# こうするとエラーが出る
comment = Hatena::Comment.new
comment.diary = Hatena::Diary.create # ここでエラー
=> ArgumentError: Hatena is not missing constant Diary!

この問題はアソシエーションの定義時にクラス名を指定すると直る。

class Hatena::Diary < ActiveRecord::Base
  has_many :comments, :class_name => 'Hatena::Comment'
end

class Hatena::Comment < ActiveRecord::Base
  belongs_to :diary, :class_name => 'Hatena::Diary'
end