昔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テーブルのデータを削除してから、テストデータを登録しています。
まず、
> 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 件のコメント:
コメントを投稿