サイト移設のお知らせ

本ホスティングサービスは、2012年5月24日に終了することになりました。それに伴い、以下の目次の文書を下記のサイトに移行しました。

====== Supportdoc.net ======

今後ともどうぞよろしく御願い申し上げます。

「はじめてのRuby on Rails」著者サポートページ


Ruby on Rails2で悩んでいませんか?

詳細は「はじめての...2」サポートページへ

「scaffold」で悩んでいませんか?

最近リリースされたRuby on Rails2で、いつものように

ruby script/generate scaffold flower

のように打って、Webアプリケーションを一気に作成して動かしてみたら

「new」ページで新規データを入力する欄がない

と、困っていませんか?

Ruby on Rails2では、以下のようにします。表「flower」に入力するフィールドが

のような構成だったとします。この場合、

ruby script/generate scaffold flower name:string comment:text
と、「nameは文字列入力、commentは長い文字列入力だヨ」というオプションをつけて打つのです。
これで、「new」ページに、テキストフィールドやテキストエリアが現れます!そこに入力して「Create」ボタンをクリックすれば無事入力完了。

詳しくは、

\ruby\lib\ruby\gems\1.8\gems\rails-2.0.1\lib\rails_generator\generators\components\scaffold\USAGE ファイルに書いてあります。


「undefined method」で悩んでいませんか?

SQLでの表作成で列名を「NAME」のように「大文字」で表示しておきながら、上記のRailsアプリケーションのほうでは「name:string」のように列名を小文字で記述すると、Webアプリケーションの動作において「nameというメソッドは定義されてないヨ」というエラーになります。SQLも、Railsも、全部小文字で扱うのが無難なようです。心当たりのある人は大文字・小文字の扱いがどうなっているか確かめてみるとよいでしょう。

日付の表示で悩んでいませんか?

Rais2で日付を表示させようとすると、「Thu 25 Dec」のように曜日のついた英語で表示されませんか?余計なお世話ですね?
たとえば「index.html.erb」においてこのような表示が出る場合、表示させたい内容に「to_date」をつけてみましょう。
たとえば、reportsという表のupdatetimeというフィールドが日付型である場合、<%= h report.updatetime.to_date>のようにします。
これで、無難な2007-12-26のような表示になります。
このto_dateという関数は

C:\ruby\lib\ruby\gems\1.8\gems\activesupport-2.0.1\lib\active_support\core_ext\date\conversion\conversions.rb

に出ている関数を使用しているつもりです。編集しないで、見るだけ見てみてください。


動作環境についての説明欠落のお詫び

本書の動作確認環境はWindows XP Professional SP2ですが、そのことを本書中に明記しておりませんでした。
このことにつき、Windows98, WindowsMeでは動作しない恐れがあります。ここに補足し、情報不足をお詫び申し上げます。

InstantRailsの展開について

InstantRailsは非常に深い階層にまでファイルがあるので、その展開に非常に時間がかかります。
加えて、展開する作業場所自体が深い階層になると、展開に失敗するなどの報告例も見られます。
筆者の展開場所は「c:\nonidata\source」程度で、これならまだ一度も失敗したことがありません。もし、展開に失敗・あるいは展開したがプログラムがうまく動作しない、という場合は、よりファイルパスの短い場所で展開するとよいと思われます。

環境変数の設定法、詳細

本書78ページにおいて「(InstantRailsのインストールフォルダ)\mysql\bin」を環境変数PATHに指定(追加)する作業について述べていますが、これをカンタンにする方法をもうちょっと詳しく説明しましょう。

(1)まず、第2章24ページにも示したように、Windowsの「フォルダオプション」で、「アドレスバーにファイルのパス名を表示する」にチェックを入れておきます。

 

 

(2)それから自分がインストールした「InstantRails」フォルダを開き、さらにその中のmysqlフォルダ、binフォルダと開いていきます。すると設定の通り、アドレスバーにそのパスが表示されますので、これを選択して右クリック「コピー」もしくはctrl+cキーでコピーします。

 


右クリックコピーの例

 

(3)「マイコンピュータ」のプロパティで「環境変数」の設定ウィンドウを出します。二つのウィンドウのうち上部の「ユーザー環境変数」で作業します。

はじめて環境変数「PATH」の編集をする人は本書に示したとおり「新規」をクリックして「新しいユーザ変数」ウィンドウを出します。
しかし、もしかすると前にインストールしたアプリケーションが自動で「PATH」を作成してしまっているかも知れません。あるいは、以前自分で新規作成したけれど、そのあとどうしたらいいかよくわからないという人もいるかも知れませんね。そういう場合はすでにリストにあがっている「PATH」をクリックで選択しておいて「編集」ボタンをクリックします。

 


すでにPATHがあればクリックして「編集」

 

(4)「新規」にしろ「編集」にしろ、「変数値」の入力欄に、(2)でクリップボードにコピーしておいた値をペーストしますが、残念ながら右クリック「貼り付け」ができないので、ctrl+vで操作します。「変数値」の入力欄をクリックしてカーソルを置いてからそれをします。
「編集」の場合、入力欄が狭くてどこに置いたらいいか手こずるかと懸念されます。一番先頭にカーソルを置いてしまいましょう。

 


わかりやすいのは先頭にカーソルを置いて、ctrl+v

 

値がペーストされたらその直後に「;」を入力して、もともとの変数値と区切ります。

 


「;」を入力して区切る

 

Windowsはこのような「コマンドサーチパスの設定」が非常にやりにくくて困りものですが、工夫すれば少しはやりやすくなります。


「Rubyコンソール」とは

「Rubyコンソール」は、その正体はコマンドプロンプトウィンドウなのですが、InsantRailsのバッチ処理により、環境変数を読み込んだり設定したり、適切なフォルダに移動したりという操作をしておいてくれます。ですから、いきなり「rails...」というコマンドを打っても言うことをきいてくれます。

 


つまりはコマンドプロンプトウィンドウだが、いろいろなバッチ処理をしておいてくれる

 

通常のコマンドプロンプトウィンドウなら、知らないと言われてオシマイです。

 


railsなんて知りませんと言われる

ちなみに、その「バッチ処理」は、IntantRailsディレクトリのすぐ下「use_ruby.cmd」に記述されています。


Rubyコンソールでの作業場所に注意しよう

上記のように、Rubyコンソール上でいきなりコマンドが打てるのは、use_ruby.cmdによって適切なディレクトリに移動させてもらっているからこそです。

たとえば、「rails railstest」とコマンドを打つと、railstestアプリケーションのフォルダはInstantRails\rails_appsフォルダ内に作成されます。それは「rails_apps」フォルダに連れて行ってもらっているからこそなのです。Rubyコンソールを起動すると、ウィンドウの真ん中あたりに、たとえばこのような処理が行われているのを見ることができます。

 


rails_appsフォルダに移動してみる

 

実験してみます。適当でゼンゼンIntantRailsと関係ない場所にbaddirというフォルダを作っておきます。
そして、Rubyコンソール上で、そのフォルダに移動してからrailsコマンドでアプリケーションbaddirappを作成して見ます。

エラーは出ず、フォルダの生成をほうこくするメッセージが出ます。一見成功したようですが、「Rails Application」ウィンドウを出して見てください。このbaddirappアプリケーションはアプリケーションの一覧に上がることはないでしょう。「Refresh List」ボタンを何度押しても同じです。

 

間違いやすいケース(1)小アプリケーションを作成する場合

こんなことを実際にやって失敗するアマノジャクさんはいないと思いますが、よくあるのは、作成したアプリケーション中にさらに小アプリケーションを作成する場合です。 下図はrightdirappというアプリケーションを作成したものの、そのrightdirappディレクトリに入るのを忘れて、baddirという「モデル」を作成しようとした場合です。

 


エラーになっただけでよかった

これはエラーになっただけで助かりました。理由は、「script/generate」というプログラムを指定したからです。これは「scriptフォルダの中にあるgenerateプログラム」を呼び出しているのですが。「scriptフォルダ」は「rightdirapp」フォルダの中に作成されますから、このフォルダの中に入らなければ見つからない、というわけです。あわてないで、現在の作業位置を確認してください。
もっとも、コマンドの打ち間違いでscriptをsciptなどとヤッてしまっても似たようなエラーになります。これもあわてないあわてない。

間違いやすいケース(2)railsアプリケーションをもうひとつ作る場合

一方、もっと深刻なのは以下のような場合です。これまでrightdirappアプリケーションの構築をしていたので、rightdirappフォルダに移動して作業をしていました。次に、新しいrailsアプリケーションanotherdirappを作成しようとして、うっかり今までの作業に続けてコマンドを打ってしまうとどうなるでしょう。


あぶなーいッ

...まあ、実はそれほど問題はありません。rightdirappフォルダの中にanotherdirappというフォルダができるだけです。ですから、それをrails_appsフォルダに移動してやれば解決します。しかし、いざ実行、という段になってあわてるかも知れません。Rybyコンソールは複数起動できますので、新しいrailsアプリケーションを作成するときは、新しくRubyコンソールを起動したほうが混乱が少ないでしょう。


実行エラーのほとんどは打ち間違い

本書では可能な限り自動生成コードやサンプルコードを利用してアプリケーションを作成していますので、RubyやRuby on Railsの根幹に関わるようなエラーはまず出ないでしょう。実行時にエラーが表示された場合、たいていは打ち間違いです。たとえば以下のエラーは、rhtml ファイル中のRubyコードで、「,(コンマ)」をひとつ忘れて打った場合です。

これは、コンマの打ち忘れ部分('edit'とidの間)に ^ の記号が記してあるので、わかりやすいですね。

もうひとつの例。これはまちがって「全角空白」を入れてしまった場合です。

人の目には一見空白にしか見えませんが、日本語入力中に入る「全角空白」はひらがなや漢字と同じ「文字コード」ですから、引用符内に入れて文字列として扱う以外は、コードに混じるとエラーになります。

著者もまだまだ素人の域を出ませんが、これまでいろいろな言語を使って見て「専門家にしかわからないエラー」により実行やコンパイルができなかったという覚えはほとんどありません。ほとんどが「なあんだというミス」でした。あわてないで行きましょう。