製造集中メモ 2
微妙なコードとそれをどう試験するか、悩ましい。
def self.find_all_with_feed_counters(user_id) @tags = find_by_sql([%{ SELECT tags.id, tags.name, COUNT(feeds_tags.feed_id) AS feed_count er FROM feeds, tags, feeds_tags WHERE tags.id=feeds_tags.tag_id AND feeds_tags.feed_id=feeds.id AN D feeds.user_id=? GROUP BY tags.id ORDER BY tags.name }, user_id]).each{|item| item.feed_counter = item.feed_counter.to_ i } end
タグクラウドをナニするためのソレだと思うんですが、acts_as_taggable 使ってるんだったらも少し楽に (ry。で、データもそれなりに用意して以下のような試験書いてみた。
def test_find_all_with_feed_counters tags = Tag.find_all_with_feed_counters(@first_feed.user_id) p p tags tags.each do |itm| p itm.id p itm.name p itm.feed_counter end end
実行したら以下のような出力
Started ............[#<Tag:0x4076f3e8 @attributes={"name"=>"fuga", "id"=>"2", "feed_counter"=>1}>, #<Tag:0x4076f398 @attributes={"name"=>"hoge", "id"=>"1", "feed_counter"=>3}>] 2 "fuga" 1 1 "hoge" 3 .. Finished in 0.605434 seconds.
Tag クラスの属性として、SQL で無理矢理ひり出した項目も突っ込めるんですね。
で、どうやって試験しよ。とりあえず直に値書くしかないかなぁ。