トップ «前の日記(2005-12-31) 最新 次の日記(2006-01-07)» 編集

3 日坊主日記


2006-01-06 [長年日記]

_ [Ruby] code coverage tools

  • coverage.rb [NaHi]
  • testrunner_coverage.rb [notwork.org]
  • gem install coverage
  • gem install insurance (requires "syntax" gem and C compiler)
  • rpa install rcov

とりあえず rpa-base を入れて rcov を試してみた。trace func は重いのかなあ。 Rails で使うなら test task に細工が必要だなあ。

rcov

colorscale で hsv2rgb か。^^; 実装はなひさんのが基になっている (module COVERAGE__)。

insurance

set_trace_func の実装を自前で持ってるみたい。速いのかなあ。

railscov は使うの簡単でいいなあ。

=begin =end の処理がうまくいっていないのか syntax-1.0.0/lib/syntax/lang/ruby.rb:27 付近で固まる。

_ [Rails] :include 指定した association の :order が効かない

うーん。

surveys 1..n questions 1..n answers があるとして

   questions.each do |q|
     q.answers.each do |a|

こんな感じでたいてい survey は question と一緒に answer を使うから

 class Survey < ActiveRecord::Base
   has_many :questions, :order => "norder", :dependent => true, :include => :answers

て :include を設定する。するとSQLが1回で済むわけやね (Question Load Including Associations)。

でもこうすると

 class Question < ActiveRecord::Base
   belongs_to :survey
   has_many :answers, :order => "position", :dependent => true
 end

この :answers の :order が効かなくなるみたい。

この場合 :include 指定に関わらず order by 節は norder のままなんだけど questions.norder, answers.position になればいいのかなあ。今回はたまたま :order の列名が異なっているけど (リファクタリングしてない) 一緒だとあかんのとちゃうかな。

svn head では直ってたりして。

 class Survey < ActiveRecord::Base
   has_many :questions, :order => "questions.norder, answers.position", :dependent => true, :include => :answers

こうかもと思ったけど questions.find(id) のとき (find by id のとき) は answers が join されなくて ActiveRecord::StatementInvalid になる。

 class Survey < ActiveRecord::Base
   has_many :questions, :order => "norder", :dependent => true
   has_many :questions_with_answers, :class_name => "Question", :order => "questions.norder, answers.position",
     :dependent => true, :include => :answers

activerecord の test/fixtures みたいに has_many 宣言を別々にしたらいいのかなあ。

_ [第五] cvs up

ささらなくなってるといいなあ。 RAST も試したいなあ…

ささるというかリファラ付きでくると固まる。mod_ruby め。

[]