2011年1月13日木曜日

Rails:Ruby on Railsを始めよう

Railsの生産性は高いことは認めているのですが、Railsの哲学であるConvention over Configuration(設定より規約)の規約を多く覚えなければならない点がRails習得の壁でしょうか。

昔Javaのオブジェクト指向を理解するまでに時間がかかったことを思い出します。今となっては不思議なくらい苦しんでいましたが・・・。

Railsもなかなか苦労しています。絶対的にプログラミングに携わる時間も少なくなっているので・・・。

それでも A journey of a thousand miles begins with a single step 千里の道も一歩からですね。

Railsの入門(インストールなど)は他のサイトに任せて、実際にRuby on Railsでアプリケーションを作成する際のポイントを覚書として、綴っていこうと思います。

  • バリデーションはmodelに書く

Productモデルにtitle,description,image_urlは必須入力を指定します。

validates_presence_of
は宣言と呼ばれますが、実はメソッド。

class Product < ActiveRecord::Base
 validates_presence_of :title, :description, :image_url
end
上記設定で、入力しなければならない項目を、未入力のまま登録しようとすると下のようなエラーが表示されます。


  • テストデータはmigrationで。
モデルproductのテストデータを作成します。Productsテーブルには名称、説明、画像URL、価格の4つの項目があるとします。
まず、
> ruby script/generate migration add_test_data

   exists  db/migrate
   create  db/migrate/20110113140008_add_test_data.rb

続いてdb/migrate/20110113140008_add_test_data.rb を編集します。

self.upメソッドに登録するデータを、self.downに登録したデータを戻す処理を記載します。
この場合upメソッドで一度Productテーブルのデータを削除してから、テストデータを登録しています。


class AddTestData < ActiveRecord::Migration
  def self.up
    Product.delete_all
    Product.create(:title => 'Cycoron', 
                    :description =>
                    %{<p>Wooden dice with bell.</p>},
                    :image_url =>'/image/Cycoron.jpg',
                    :price => 28.5)
                    
    Product.create(:title => 'Moguzilla',
                    :description =>
                    %{<p>Wooden pen stand.
                      It looks like a whale.</p>},
                    :image_url => '/image/Moguzilla.jpg',
                    :price => 168.0)
  end

  def self.down
    Product.delete_all
  end
end

データを削除する場合、マイグレーションのバージョンを指定しますので、
> rake db:migrate:down VERSION=20110113140008
を実行すれば、テストデータが削除されます。
また、データベースを最新の状態に戻すには
> rake db:migrate
を実行すればOK。

試したコンソールは次のような感じです。(削除も試し、再度マイグレーションを実行)

*****-no-MacBook-Pro:depot *****$ rake db:migrate:down VERSION=20110113140008
(in /Users/*****/NetBeansProjects/depot)
==  AddTestData: reverting ====================================================
==  AddTestData: reverted (0.0037s) ===========================================

*****-no-MacBook-Pro:depot *****$ rake db:migrate(in /Users/*****/NetBeansProjects/depot)
==  AddTestData: migrating ====================================================
==  AddTestData: migrated (0.0217s) ===========================================

一覧画面

0 件のコメント:

コメントを投稿