Ruby on Rails

ユニットテストから link_to や url_for を使う方法

リンクや URL の HTML を生成してくれるヘルパメソッド link_to や url_for をユニットテストで使いたいことがあるかもしれない。これらは基本的にコントローラかビューのコンテキストで使うことが前提になっているから、ユニットテストではそのままでは使え…

リクエストの消費時間内訳

Rails のログを見ると、各リクエストの記録の末尾に次のような行がある。 Completed in 1.08156 (0 reqs/sec) | Rendering: 0.25919 (23%) | DB: 0.78924 (72%) | 200 OK [http://foobar.com/entries/show/64343]今日は、これがどんな意味があるのか調べてみ…

file_column プラグイン内部構造

file_column の内部構造についてメモ。 Rails におけるファイルアップロードの仕組みについて。 まず file_column を使わずにどうやってファイルをアップロードするのかというところから始める。Entry モデルに image というファイル用のカラムがあったとす…

file_column を使ってファイルを保存する

file_column プラグインと言えば、普通はファイルのアップロードに使うもの。しかし、実際には既存のファイルを新システムに移行させるときなどに、ローカルにあるファイルをデータベースに登録したいときがある。たとえば、Entry モデルに image という属性…

functional test をめぐる冒険

趣旨 自動テストは重要だ。この主張に真っ向から異を唱えるひとは多くないだろう。だが実際には、テストを書くのはいささか面倒だ。特にコントローラのテスト(functional test) に苦手意識を持っている人は多いのではないか。post やら get やらいろんなメソ…

Ruby-GetText の導入

趣旨 私の心はいまだに ActiveHeart にはあるものの、世の中の趨勢はどうやら Ruby-GetText に傾きつつある模様。一念発起して Ruby-GetText を使ってみた。とりあえずやりたいことは、 フォームの Vaildation 時のエラーメッセージの日本語化 (カラム名の日…

scaffold_generator の歩き方

趣旨 scaffold_generator は Rails を代表するコードジェネレータである。scaffold(足場)という名前の通り、モデル名を指定することにより、そのモデルに対する CRUD 操作を行うコントローラやビューを吐き出してくれる。 Rails 使いならば、足を向けては寝…

Generator の歩き方

趣旨 script/generate はいわずと知れた Rails のコードジェネレータである。 % cd $RAILSAPP % ruby script/generate scaffold MyModelなどとして使う。このコードでは MyModel に関するコードの雛形が生成されるわけだ。 今日は、この script/generate が…

file_column の validation で日本語のメッセージを使えるようにする。

趣旨 ファイルアップロードを劇的に楽にするおなじみ file_column プラグイン。作者の Sebastian Kanthak さんは、現在 Google にお勤めの凄腕ハッカー。写真を見る限りは、なかなかのイケメンである。(日本のハッカーで誰が一番イケメンかなあ) それはさ…

ActiveRecord の Association と格闘

ActiveRecord のアソシエーションがらみで現在格闘中である。 assciations.rb reflection.rb associations/*.rb を読んでみた。それでもすっぽり頭にコードが入ってこない。確かにいろんなことをやっているから、どうしてもコードが難しくなってしまうのはわ…

Multiparameter Assignment を理解する

趣旨 仕事で validates_multiparameter_assignments プラグインを使う機会があったので、Multiparameter Assignment の動作原理を理解したい。このプラグインは、2007/2/31 みたいな日付データを検証エラーにしたいという意図から作られている。Multiparamet…

ログにタイムスタンプを追加する

Rails のログ(development.log / test.log / production.log) は使いやすいが、なぜかログにタイムスタンプが吐き出されない。どうしてだろうと、つらつらと Rails のソースコードを眺めてみた。やはり ActiveSupport の clean_logger.rb でわざわざ時刻もな…

distance_of_time_in_words 日本語化

趣旨 Rails には2つの時点の間隔を概数で報告してくれる distance_of_time_in_words というメソッドがある。Rails らしいオシャレなメソッドなのだが、これを日本語化してみた。先日公開した DateHelperJa プラグインに追加する形で公開する。 % script/cons…

ActiveForm のエラーメッセージを日本語化

趣旨 任意のクラスに対して ActiveRecord 風の validation が掛けられるようになる ActiveForm plugin。便利だが、一つの問題は、としたとき、エラーメッセージの前半部が「priceは不正な値です」みたいになってしまってかっこ悪い。ActiveHeart の set_fiel…

WEBrick で Basic 認証を行う

趣旨 WEBrick で Basic 認証を行ってみる。 #!/usr/local/bin/ruby require 'webrick' include WEBrick mime_types = HTTPUtils::DefaultMimeTypes mime_types['rhtml'] = 'text/html' server = HTTPServer.new( :Port => 2000, :MimeTypes => mime_types, :…

Apache でプラグインを公開する方法

ディレクトリインデックスを簡素化する。公開するレポジトリディレクトリの .htaccess ファイルに以下の記述を入れる。 Options +Indexes IndexOptions -FancyIndexing -SuppressColumnSorting IndexIgnore '..'後は、レポジトリディレクトリにそのままプラ…

DateHelperJa プラグイン公開

趣旨 ActionView::Helpers::DateHelper を日本語化する。DateFormJa をプラグインとしてインストールするだけで、datetime_select,date_selectが日本語表示される。 Example: datetime_select("model", "attr") # =>"2007年 4月 29日 13時 14分" オリジナル…

GeoKit plugin で住所=>緯度変換を行う

趣旨 緯度経度がらみの面倒を見てくれる GeoKit が熱い。 http://earthcode.com/blog/2007/02/geokit_map_plugin.htmlGeoKit は多機能だが、今回は住所=>緯度変換を行うことに的を絞る。 試した環境 Rails 1.2.3 インストール Google Maps キーはあらかじめ …

Google Maps plugin

Google Maps plugin は本家は、http://johnwulff.com/articles/2006/08/05/rails-google-map-pluginらしいが、そこに記述されているリンクからはプラグインがダウンロードできなかった。 いろいろ調べてみた結果、 % cd my_rails_app % ruby script/plugin i…

WEBRick を使ってプラグインを公開する方法

WEBRick の問題点 プラグインを自動的にインストールできる plugin コマンドにはいつもお世話になっている。このコマンドの実体は、(Rails gem home directory)/lib/commands/plugin.rb にある。ソースコードをつらつらと眺めていると、% ruby script/plugin…

ssl_requirement を改造して、https => http の画面遷移でブラウザの警告をなくす

Rails 作者の David Heinemeier Hansson 謹製プラグイン ssl_requirement は実によくできている。わずか40行のコード。だが、http と https の切り替えを完璧にやってくれる。ruby script/plugin install http://dev.rubyonrails.org/svn/rails/plugins/ssl_…

SSL 上で WEBrick を動かす

何がうれしいか Rails で WEBrick on SSL してみた。 基本は、ここみたいにやればいいのだが、もうちょっと標準の script/server コマンドに近いノリにしてみた。デフォルトのポートはなんとなく 3500 番にしてあるが、% ruby script/webrick_ssl --port=360…

initializer.rb に感動

Rails の initializer.rb に感動した。なんという美しいコード。シンプルで、柔軟で、パワフル。 Ruby と DHH の洗練されたセンスに脱帽。

Rails のモジュールオートロード機能

Rails では require しなくても、初めてあるクラスを使ったとき、その定義をファイルを自動的にロードしてそのクラスを使えるようにしてくれるという便利な機能がある。それゆえ、たとえばコントローラのなかでモデルクラスを参照しても Ruby インタプリタか…

現在のコンテキストで使用可能なメソッドの一覧

昨日も書いたけれども、Rails でコードを書いていてイヤになるのは、Ruby の動的な性格から、いま self が何で、使用可能なメソッド名は何かということがわかりずらいということである。そんなときこんなふうにしてみるといいかもしれない。 logger.debug "s…

WWW SQL Designer for Rails 修正

Rails 使いをちょっとハッピーにする WWW SQL Designer for Rails の修正。まったく恥ずかしいが単数形のテーブルを使ったとき foreign key がきちんと自動生成されないというバグに気がついた。やれやれ。直したので使ってみてほしい。ではでは。

Rails アプリが入れた日本語を phpmyadmin で見ると文字化けする

VMWare 上の Linux で走る Rails アプリから Host OS の Windows 上で動く MySQL につないだところ、Rails 上では日本語がきれいに出るのに、phpmyadmin で直接データベースを覗くと文字化けしている。環境は、MySQL 4.1.20 + Rails 1.2.3。 Ruby/Ruby on Ra…

WWW SQL Designer for Rails (English Version)

WWW SQL Designer comes in handy when you try to draw database ER diagrams on the web. I have hacked the Web SQL Designer to make Ruby on Rails programmers' life easier. You can generate Rails migration script based on ER diagrams. Wnen you…

WWW SQL Designer for Rails

Web で、データベースの ER 図が描ける WWW SQL Designer は便利だ。Rails ユーザの利便性向上のため、次の修正を加えた。 ER 図を Rails のマイグレーションスクリプトとして出力。 テーブル間のリレーションを作るときに、自動的に生成される外部キーの名…

ActiveRecord の歩き方 - Association 編(4)

前回までの復習 この「ActiveRecord の歩き方 - Association 編」も今回で4回目を迎える。そもそもの疑問の始まりは、 ▼コード 1 class Entry < ActiveRecord::Base has_many :comments end class Comment < ActiveRecord::Base end というモデルにおいて、 …