2013/04/17

ヘルパーモジュールの読み込み方の違い

ヘルパーモジュールの読み込み方に関しては少し複雑な歴史があります。Rails 1.x の時代には application_helper.rb とコントローラに対応したヘルパーモジュールが読み込まれました。全部読み込みたい場合は application_controller.rb に helper :all と記述する
必要がありました。しかし、Rails 2.x 時代になると、application_controller.rb に初めから helper :all が記載されるようになったため、全部読み込みたくない場合だけプログラマー自身が helper :all を削除することになりました。さらに Rails 3.0 で「全部読み込む」がデフォルトになり、そうしたくない場合に clear_helpers を呼ぶという仕様になったのです。実は、次のバージョン 3.1 でまた仕様が変わる予定です。config/application.rb の中で config.action_controller.include_all_helpers = false のように記述すると「全部読み込まない」という振る舞いになります。
(はじめる!Rails3(2)より)

Railsのモデルのcountとsizeの違い

<% tasks = Task.where(:done => false) %>
<% tasks.each do |t| %>

<%= t.name %>

<% end %>

合計: <%= tasks.size %>

2-4 行でタスクの名称を列挙しているので、該当するレコードデータはすべてアプリケーションに読み込まれています(この状態を「オブジェクトがロードされた」と表現します)。
このとき、tasks.size はデータベースに問い合わせる代わりに、オブジェクトの個数を数えて返します。しかし、ここで tasks.count と書いてしまうと、Rails は再度データベースに問い合わせます。微妙な話ですが、少しだけ無駄なのです(はじめる!Rails3(2)より)。

2013/04/14

パフォーマンス監視サービスのNew Relicが超便利な件

パフォーマンス監視サービスのNew Relicが超便利な件
2013/11/23 追記:

試してみました。笑いが止まらない、あんど、「裏で何やってんだ?」って怖さで凄いです。プルプル震えるレベルww
これ、ActiveRecordを使っているデーモンの生存確認やボトルネックも調査できますね。Railに沿って作ると加速するのを凄く実感。

2013/04/12

ヘルパーメソッドrender

def done
  @tasks = Task.where(:done => true)
  render :index
end
Rails 2.x では、render :action => ’index’ のように記述する必要がありました。Rails 3 でもこの書き方は有効ですが、より簡潔な記述法が導入されたのです(はじめる!Rails3より)。

form_forの前の等号

<%= form_for @task do |form| %>
Railsで2.3までは等号を書くとエラーになりましたが、Rails3.0ではここに等号を書かないとログに警告が出力されます。Rails3.1で等号なしの書き方は廃止される予定です。(はじめる!Rails3より)
はじめる! Rails3(1)

2013/04/11

Aptana Studioを使い倒すためのまとめ

JavaがRubyより開発効率がいいとは言えないと思う。逆も然り。でも、eclipseは間違いなくいいエディタで、Rubyにもそういうものがあったほうがいいに決まってる。なので、Aptana Studio 3を使うことにしました。
そのまとめ集をちょっとずつ書いていこう。

まずステップ実行環境。
gem install ruby-debug-base ruby-debug-ide
を実行した後、ここに習ってtestフォルダにある該当のテストコードを右クリック、Debug AsDebug Configurationsを選択。Interpreter Argumentsに-Itestを入力、Working Directoryをプロジェクトのルートに変更すれば良い。
プロジェクト全体を実行するときは、ルートフォルダを右クリックしてDebug Serverを選択。

後で見るリンク:
http://www.geocities.co.jp/SiliconValley-SanJose/2485/Aptana_guide.html

シェルスクリプトからrubyをキックしてるようなプログラムのデバッグの仕方がわからないなぁ。

追記:
上記はruby1.8.xの場合。1.9以降の場合はいろいろ試行錯誤が必要そう。

2013/04/08

Mongoidを勉強するにあたってのリンク集

mongoid2 を mongoid3 にあげてみた @ sonotsのblog
そうそう。バージョンがあがったときってぐぐってもバッドノウハウしかヒットしなかったりするんですよね。こういうのまとめてくれてると大変ありがたいです。

mongoid 3.0でreferences_manyなどが廃止 @ deadbeef
references_manyって廃止されてるんだ。ひゃー。