2012年7月24日火曜日

[Rails]デバックをする時だけ使うメソッドやツール

Rails console

railsのディレクトリに移動してrails console(またはrails c)と打つと、irb見たいな対話実行環境が立ち上がってアプリ内で定義したモデルとかが自由に使える。

ちなみにGemfileにgem 'pry-rails'と追記してbundle installするとrails consoleがpryになる。

オブジェクトのコピーを作成

例えば、何かのオブジェクトを一覧で表示するようなviewを作っていた場合に、表示対象のオブジェクトが沢山あった場合にどんな見栄えになるか試したい時があると思う。

表示対象のオブジェクトが、簡単にデータを準備できる物なら良いんだけど、例えば、多対多の関連を持っていて中間テーブルがあるモデルだったり、関連する別のモデルをincludeしているデータだったりすると、ダミーのデータを大量に作成するのが面倒臭い。

テストコードを書くならならFactory Girlなどを使えば良いと思うんだけど、ちょっとviewの見栄えを確認する用途には向いてない。そんな時は、ダミーのデータを1つ作ってオブジェクトをコピーすると便利。

やり方は簡単で、コピーしたいオブジェクトの#copyと言うインスタンスメソッドを呼び出せば良い。#copyを実行する事でレシーバーのコピーが返却される。#copyは参照をコピーするだけで、値まではコピーしてくれないけど、とりあえず、viewの見栄えを確認するだけならこれでも役に立つ。

例えば以下のようにするとobjのコピーを100個作って返却してくれる。
しかも、#copyはObjectのインスタンスメソッドなのでほとんどのオブジェクトをコピーする事ができる。
 
def create_dummy_array(obj)
  dummy = []
  100.times do
    dummy << obj.dup
  end
  dummy
end

.all

モデル(例えばUser)に対してUser.allと言うメソッドを実行すると、全userのオブジェクトを返却してくれる。プロダクトを作る上で、全レコードが必要な事ってあんまり無いし、全レコード取得したら重たくて使えない場合が多いとは思うけど、デバックの時にはたまに便利。

.delete_all

User.delete_allでUserの全レコード削除。これもデバックの時にはたまに便利。

0 件のコメント:

コメントを投稿