モデル・オブジェクトの配列/集合の作り方。
いや、つうか、ね?
オブジェクトの配列を作る時、例えば、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
で、良い訳だよね?
ずっと解りやすくない?
これ、もっともっと検索式が複雑になればなるほど、ずっと大きくなるよね?
ずっとずっと解りやすくなるよね? ね?
なんで、こんなことを紹介してくれないの?
むちゃむちゃ有用じゃん?
...ダメ?