モデル・オブジェクトの配列/集合の作り方。

いや、つうか、ね?


オブジェクトの配列を作る時、例えば、Userというモデルがあって、その中で、stateがactiveなもの全ての集合を作る時。
大概のRails本とか、それ関係のウェブとか見ると、コントローラで、

@users = User.find(:all, :conditions => {:state => "active"})

って、書くように、書いてあるよね?


まあ、正しいと思うんだけど。
じゃあ、関連付けされているものは?
Userモデルでhas_manyで関連付けされているMessageモデルがあって、idが1のUserオブジェクトと関連付けされている、stateがsubmittedなMessageオブジェクト全ての集合を作る時は?

  User.find(1).messages.find(:all, :conditions => {:state => "submitted"})

だよね?
うん。


で、ふっと気が付いた。
でも、これ、コントローラに書く必要、無いよね?
むしろ、モデルに書くべきじゃね?
そりゃあ、ね?
某かのトリガによって、:conditionsの内容が変わるんなら、コントローラに書くべきでしょうよ。


でも、変わらないんだったら。
モデルに、

  has_many :submitted_messages, :conditions => {:state => "submitted"}, :class_name => "Message"

って書いておけば、コントローラ側では、

  @messages = User.find(1).submitted_messages

で、良い訳だよね?


ずっと解りやすくない?


これ、もっともっと検索式が複雑になればなるほど、ずっと大きくなるよね?
ずっとずっと解りやすくなるよね? ね?


なんで、こんなことを紹介してくれないの?
むちゃむちゃ有用じゃん?


...ダメ?