製造集中メモ 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 で無理矢理ひり出した項目も突っ込めるんですね。

で、どうやって試験しよ。とりあえず直に値書くしかないかなぁ。