Ruby on Rails/動的条件でhas_oneしEagerLoad http://www.ark-web.jp/sandbox/wiki/5033.html
拙速メモ
- dogxiの犬のランキングの部分ではまったのでメモ
- 犬は 直近10日間のランキング、直近30日間のランキングなど、複数のランキングを持つ
has_many :user_rankings, :dependent => :destroy
- 直近30日のランキングを表示するときは、直近10日間のランキングのインスタンスを生成せずに、直近30日間のrankingだけeager loadしたい
- has_oneのconditionを動的に設定できないか、検討したがうまくいかない
参考: dynamic condition for has_one and eager loading issue - Ruby Forum
http://www.ruby-forum.com/topic/170709
- 解決方法 => has_oneではconditionを指定せず、find時に指定する
has_many :user_rankings, :dependent => :destroy has_one :current_user_ranking, :class_name => 'UserRanking', :foreign_key => :user_id
- 検索時にconditionで絞ってやる
dogs = Dog.find(:include => :current_user_ranking, :conditions => ['user_rankings.ranking_id=?', ranking_id]) - これで dogs[0].current_user_ranking で取れる。
ついでに †
- will_paginate で includeがうまく動作しない、とどこかのブログにあったけど、僕が試したところはうまくいった。バージョンは2.3.6。
![[PukiWiki] [PukiWiki]](image/sandbox.gif)



