fc2ブログ

2023.08 «  - - - - - 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 » 2023.10
TOP > Ruby-GetText初体験その2【英語のアプリをまず作成】

 ← Ruby-GetText初体験その3【日本語を使うぞ宣言】 | TOP | Ruby-GetText 初体験その1【インストールしてみる】

Ruby-GetText初体験その2【英語のアプリをまず作成】 

2007年09月20日 ()

その1【インストールしてみる】
その2【英語のアプリをまず作成】
その3【日本語を使うぞ宣言】
その4【require 'gettext/rails' と init_gettext】
その5【ファイルをUTF-8で日本語書き換え】
その6【po ファイルと mo ファイル】



何はともあれ、Rails アプリを作らなくては始まりません。

というわけで、今回も楽ちん scaffold を使用してみようと思います。

やろうとしているアプリは、

■アプリ名:MyFirstJapanese
■モデル:Book
 Bookモデルは、その名の通り本を表します。
■コントロール:BookMng
 まあ、この名前は適当です。
■ビュー:
 scaffold を使って、本情報の追加・変更・削除を行います。

というのが目標で、でもこれだったら英語バージョンはすぐ出来てしまいそうですね!

というわけで、さっさと英語バージョンを作ってしまいます。

# rails MyFirstJapanese



これでアプリ作成完了!

アプリのルートディレクトリへ移動します。

# cd MyFirstJapanese



アプリの開発用(_developement)のDBを作成します。今回、日本語文字コードを UTF-8 に想定していますので、その点も考慮します。
テスト用DB(_test)と本番用DB(_production)は面倒くさいから今回は作成しません。

# mysql -u root
mysql# create database MyFirstJapanese_development character set utf8;



では、scaffold を作成します。

# script/generate scaffold Book BookMng
.
.
.
error Before updating scaffolding from new DB schema, try creating a table for your model (Book)


という風にエラーがでました。orz
どうやら、Book モデルを作るのに、DB にテーブルをまだ作成していなかったのが敗因のようです。
なので、さっき作った scaffold を消しに掛かります。

# script/destroy scaffold Book BookMng



つまり、上の 2 つの手順 (script/generate scaffold.... と script/destroy scaffold....) は、やり損です。やらなくてもいいのです。ごめんね。

さて気を取り直して、DB に Book モデルに対応するテーブル、books テーブルを作りましょうっと。テーブル名は複数形なのをお忘れなく。

そのためには、手動で CREATE 文を流してもいいのですが、せっかくなので rake migrate を使います。

で、そのために、まずは migration ファイルを自動生成します。

# script/generate migration new_book_table



このコマンドで出来た db/migrate/001_new_book_table.rb ファイルを編集します。↓の赤字の部分を追加です。

db/migrate/001_new_book_table.rb

class NewBookTable < ActiveRecord::Migration
  def self.up
    create_table "books" do |t|
      t.column "title", :string # 本の名前
      t.column "author_name", :string # 作者の名前
      t.column "author_gender", :char # 作者の性別
      t.column "isbn", :string # ISBN番号
      t.column "price", :integer # 本の価格
    end

  end

  def self.down
    drop_table "books"
  end
end



そしたら、テーブルを DB の中へ作成します。

# rake db:migrate



今度こそ、script/generate scaffold コマンドが成功するはずです。

# script/generate scaffold Book BookMng



よし、これでひとまず最低限のレベルのものができあがりましたので実際に動かして試してみます。

# script/server



そして、ブラウザより

http://localhost:3000/book_mng/

を見てみましょう。

ワーイ、できたできたー。

と、これだけでは面白くないので、まずバリデーション、つまり入力規則チェックをします。↓の赤字の部分を追加です。どんな入力規則チェックかは、↓のコメントを見て察してください。

app/models/book.rb

class Book < ActiveRecord::Base
  # 必須チェック
  validates_presence_of :title
  validates_presence_of :author_name
  validates_presence_of :author_gender
  validates_presence_of :price

  # 長さチェック
  validates_length_of :title, :maximum => 50
  validates_length_of :author_name, :within => 2..40

  # フォーマットチェック
  # 数字-数字-数字-数字 の並びが0個か1個という意味です・・・
  validates_format_of :isbn, :with => /^(([\d]+-){3}[\d]+)?$/
  # 整数チェック
  validates_numericality_of :price, :only_integer => true

end



最後に、gender を male と female のラジオボタンにします。↓の赤字の部分を書き換えました。

app/views/book_mng/_form.rhtml

<%= error_messages_for 'book' %>

<!--[form:book]-->
<p><label for="book_title">Title</label><br/>
<%= text_field 'book', 'title' %></p>

<p><label for="book_author_name">Author name</label><br/>
<%= text_field 'book', 'author_name' %></p>

<p><label for="book_author_gender">Author gender</label><br/>
<%= radio_button 'book', 'author_gender', 'm' %>male<br/>
<%= radio_button 'book', 'author_gender', 'f' %>female<br/>
</p>

<p><label for="book_isbn">Isbn</label><br/>
<%= text_field 'book', 'isbn' %></p>

<p><label for="book_price">Price</label><br/>
<%= text_field 'book', 'price' %></p>
<!--[eoform:book]-->



ワーイ、できたできたー。

これで英語版は完成です。

次回、いよいよ日本語版にしていきます!一人でわくわくしています!

【広告】

[2007.09.20(Thu) 19:53] 日本語化Trackback(0) | Comments(0)
↑TOPへ

 ← Ruby-GetText初体験その3【日本語を使うぞ宣言】 | TOP | Ruby-GetText 初体験その1【インストールしてみる】

COMMENT

COMMENT POST















管理者にだけ表示

 ← Ruby-GetText初体験その3【日本語を使うぞ宣言】 | TOP | Ruby-GetText 初体験その1【インストールしてみる】