前回はURLからHello,Rails!が表示されるところまで進めました。
今回は動的なページの表示から始めていきたいと思います。
・動的なページの構築
動的なテンプレートの作成として2通りがある。
- Builderを使用し作成
- テンプレートにRubyを埋め込み作成
今回では2つ目のRubyを埋め込む方法で進めていく。
rhtmlという拡張子にしたのはこのためであり、RubyのERbというシステムを使用している。
上記システムでは<%= %>の間に記述されたものはRubyのコードとして実行、出力される。
さらに<% %>の間では、Rubyのコードの実行のみが行われる。
また、出力した文字列が特殊文字でページ表示の妨げになるのを防ぐためにh()というヘルパーメソッドも併用される。
動的なページのサンプルとして、時刻が表示されるページを作成します。
<html> <head> <title>Hello,Rails!</title> </head> <body> <h1>Railsからこんにちは!</h1> <p> 現在の時刻は、<%= Time.now %>です。 </p> </body> </html>
これで現在時刻が「現在の時刻は、Mon Jun 21 21:08:06 +0900 2010です。」のように表示されました。
これよりもう少し簡単に表示出来るようにsay_controllerもイジってみます。
(classなど省略) def hello @time = Time.now end
そして、hello.rhtmlの方を
現在の時刻は、<%= @time %>です。
こうすることで、@timeというインスタンス変数に時刻を入れることによりview内でも表示出来るようになります。
・リンクによる複数ページの連携
リンクすることにより別のビューを展開する方法を学びます。
今回はそれぞれのビューに対応したアクションメソッドを定義する(定義せずに既存のものを使う場合もアリ)。
say_controllerにgoodbyeメソッドを追加し、views/say内にはgoodbye.rhtmlを作成する。
2つのページをつなげる方法としてviewの中にa href=・・・と挿入するのもいいが、ヘルパーメソッドという有用なものがあるので、その中のlink_toを用いる。
<%= link_to "さようなら!", :action => "goodbye" %>
これをview内に埋め込むことでgoodbye.rhtmlにリンクすることが出来ました。
- actionの部分はシンボルと呼ばれており、コロンは
- bold;">〜という名前をもつものを表しています。
ここで第4章は終了です。
・第5章〜 Depotアプリケーション
この章ではDepotというショッピングカートアプリケーションを作成します。
開発の進め方について色々読んだ後実際に動くものを作っていきます。
- アプリケーション名をdepotとして作成
- 次にデータベースの設定
これはこちらを参照のこと。
データベース名はdepot_developmentに。
- アプリケーションの設定
config/database.ymlについての各種パラメータ説明。
- adapterはデータベースの種類をRailsに通知。今回はMySQL。
- databaseはデータベース名の指定。今回はdepot_database。
- usernameとpasswordは読んで字のごとく。
- hostはデータベースを実行しているマシンをRailsに通知。
>rake db:migrate
と実行し、エラーが無ければデータベースとの連携が取れている。
- Productsモデルとテーブルの作成
Productsテーブルを作成するのと同時にそれを使うProductsモデルも作成しなければいけません。
Railsにはデータベースに適用する変更を表すデータベースマイグレーションが定義でき、それによりスキーマとデータの両方を更新出来る。
詳しくは16章にて。
マイグレーションを用いて作成に掛かる。
>ruby script/generate model product
生成されたファイルの中で数字の羅列_create_products.rbがマイグレーションファイルです。
中身はこんな感じになっています。
class CreateProducts < ActiveRecord::Migration def self.up create_table :products do |t| t.timestamps end end def self.down drop_table :products end end
upメソッドでマイグレーション適用、downメソッドで元に戻すってな感じです。
それではこれを改変していきます。
lass CreateProducts < ActiveRecord::Migration def self.up create_table :products do |t| t.column :title, :string t.column :description, :text t.column :image_url, :string t.timestamps end end def self.down drop_table :products end end
これらはそれぞれ3つの列を挿入しただけです。
簡単ですねー。
で、この変更したマイグレーションを適用していきます。
>rake db:migrate
本日はここまで、次からはコントローラを作成していきます。