* Ruby on Railsの基礎 [#w16c5195] #contents ** 概要 [#h9d69081] ** Ruby on Railsの構造 [#q3eb3cb7] Ruby on Railsは、オブジェクト指向として、クラスを使って構成されている。 しかし、実際には、グローバルなオブジェクトが大量に存在する状態で、いつでもどこからでも、データを表すクラスにグローバルにアクセスできてしまう。 従って、Ruby on Railsを利用する側が、分かりやすく読みやすくする工夫をしないと、アクロバチックなものが出来上がってしまいかねないので注意する必要がある。 しかし、きちんと気をつけて利用すれば、非常に柔軟にWebAppを作ることができ、早さと簡単さの恩恵に与ることができる。 *** MVCモデル [#keacb9b1] MVCとは、次のようにモジュールに分離したプログラミングモデルのことである。 - Modelモジュール -- データベースなどを用いてデータを扱う -- つまり、データ構造を扱う -- データの整合性やバリデーションを行い、データモデルを隠蔽する - Viewモジュール -- データを見れるようにする -- Modelの内容を表示形式に変換する -- ユーザがControllerにアクセスできるように、リンクやフォームなどを提供する - Controllerモジュール -- ロジックを制御する -- Viewが必要とするデータをModelから持ってくる -- Viewに入力されたデータでModelを書き換える *** 動作の流れ [#i77ca79f] ユーザは、最初に何らかの手段で(お気に入りとか)、Controllerにアクセスし、Controllerが返すViewから、次のControllerにアクセスし…という流れを繰り返して動作する。 ようするに、ControllerがViewを返し、そのViewを使ってControllerにアクセスする、の繰り返しである。 ** Ruby on RailsでのModel [#a4c08c7b] Ruby on Railsでは、データベース上でSQLを発行してテーブルを作れば、それでモデルの定義は完了する。 あとは、Ruby on RailsがO/Rマップしてくれるので、特に気にする必要はない。 一つだけ注意すべきこととして、主キーはidという列名にする必要がある。これ以外の列名では正しく動作しない。たとえば、useridという列名を主キーにすると、正しく動作しない。 注意すべきこととして、主キーはidという列名にする必要がある。これ以外の列名では正しく動作しない。たとえば、useridという列名を主キーにすると、正しく動作しない。 また、列名には、RoRの予約語(type等)と、Rubyの予約語(class等)は利用できない。これは、仕方がないことといえるかな。 *** Model名とテーブル名 [#o42f61c9] Modelの名前と、扱うデータベーステーブルの名前の関係は、単数形と複数形の関係になっている。(あとは、先頭が大文字かどうかなどの差異がある) |Model名|テーブル名| |Data|datas| |File|files| |Folder|folders| |Directory|directories| |Person|people| 日本人が注意すべきことは、Personの複数形が、Personsではなくpeopleであるように、単純な規則にならないものがある点だ。 チュートリアルを読んでも、peopleテーブルの中身を、なぜPersonクラスが扱うのか分からなかったりするかも知れないので要注意。 ** Ruby on RailsでのView [#q5afc8c8] *** フォルダ位置とファイル名 [#ac752afc] ビューは、views/[コントローラ名]/[アクション名].rhtmlとする必要がある。これにより、Controllerでいちいちビューを指定したりせずに済む。 *** RHTML [#m87aa34b] Ruby on Railsでは、ビューを定義するために、RHTMLというHTML風テンプレート書式を用いる。これは、実際にはeRubyが利用可能なHTMLである。 RHTMLでデータの挿入を指示すると、そのデータの定義に従って、適切な方法で表示や編集のためのHTMLが生成される。 つまり、データの表示方法は、Modelによる定義により決まるということである。いちいちinputタグを書いたりといったことをする必要はないし、してはならない。 詳しいことは、eRubyを参照すると良い。 基本的には、<% ... %>で、Rubyのコードを実行し、<%= ... %>で、結果をその場に埋め込む。あとは、それぞれのタグの中に入れるRubyコードを知れば良い。 もっとも単純な例は、<%= "Strings" %>で、これは、その場にStringsと書いたのと同じになる。 注意点としては、printやputsのような出力関数の結果は、標準出力に流れてしまうので、使えないということである。<% print "Strings" %>は正しく動作しない。<%= print "Strings" %>も同様である。 *** Helperによるデータ出力カスタマイズ [#qb252d9b] Helperを使うことで、Modelで定義されたデータをViewにどのように出力するかを変更できる。 たとえば、数値型を、数値しか入力できないテキストボックス(それが存在すればの話だが)としてViewに出力する、といったカスタマイズが行える。 ほかにも、日付型データはカレンダーをViewに挿入して出力とするといったこともできる。 ** Ruby on RailsでのController [#nff35914] *** アクションの定義 [#zad63952] アクションの定義は、クラスのメソッドとして定義する。 *** アクションがすべきこと [#a9a3b2e5] アクションでは、ビューが必要とするデータをモデルから引っ張ってきたり、逆に、ビューに入力されたデータでモデルを書き換える。 *** scaffold [#x47a2b2a] Controller内のクラス定義部分に、次のようなことを書くと、Modelの操作画面が自動で生成される。 scaffold :[Model名] この時、new・edit・show・destroyというアクションが使用される模様。 よって、scaffoldより後の行でアクションを再定義してしまうと、scaffold標準機能が使えなくなる。逆に、わざと再定義することで、一部動作を変更したりできそうだ。 ** リクエストとの関係 [#g114de09] Modelのところで、主キーはidとするという制約があったが、リクエストをルートする際のルート式により、使用するControllerと、そのアクション、そして主キーであるidの値(正確には、idに関しては主キーの値として使わなくても良い)を渡すことができる。 Controller名と、引き起こされるアクションは、Ruby on Railsが内部的に使って、利用者側としてはあるControllerのあるアクションが呼ばれたという形で知ることができる。 ルート式に関する詳細は、リファレンス/RoR/routes.rbを参照せよ。 ** 参考リンク [#n1782ffc] - [[公式チュートリアル>http://www.rubyonrails.org/show/Tutorial]] - [[公式リファレンス>http://api.rubyonrails.org/]]