Ruby-GetText初体験その2【英語のアプリをまず作成】
その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]-->
ワーイ、できたできたー。
これで英語版は完成です。
次回、いよいよ日本語版にしていきます!一人でわくわくしています!
【広告】