rails3のフォームの検証機能であるvalidateの方法

ruby on railsにはフォームの検証を簡単にすることができるActive Modelのvalidatetion機能があります。

これを使うことで簡単に、必須検証、文字列検証、数値の大小など検証ができるようになります。

使い方

app/models/モデル名.rbをひらいて、
ActiveRecord::Baseとendの間に記述します。
例えば、

class Product < ActiveRecord::Base
   validates :title,  :presence => true,:uniqueness=>true
 end

Rail2.0で良く使われていた書き方

class Product < ActiveRecord::Base
   validates_presence_of :title
   validates_uniqueness_of:title
 end

よく使う検証機能

:presence
値が入っているかどうかの確認。(必須確認など…)

:uniqueness
データベースなどに、既に登録がないかどうかの確認

:numericality
数字の大小、整数、奇数、偶数などの確認
例えば:数字で20未満の数かどうかの確認

:numericality => {:only_integer => true, :less_than => 20}

railsのvalidateを日本語化する方法

初期設定では、英語でしかエラーメッセージは表示されません。
エラーメッセージを日本語化する方法を2種類紹介します。

一つづつ変更する方法

rails3からは:messageを使うことで、validateのエラーメッセージを変更できます。

class Product < ActiveRecord::Base
validates :title,  :presence => {:message =>'は必須です。'}
end

一気に変更する方法

日本語(ほかにもいろいろ)に変換することができます。
ダウンロードページへ

1、上記サイトからja.ymlをダウンロードしてきて、
config/localesにおきます。

2、ja.ymlを読み込ませる。
config/application.rbの38行目
config.encoding = “utf-8″の後に

config.i18n.default_locale = :ja

を追加します。

3、赤枠のタイトルを変更する
まだ、validateをくくっている赤枠は、_form.html.erbに記述されているので
app/views/???/_form.html.erbの

<h2><%= pluralize(@product.errors.count, "error") %> prohibited this product from being saved:</h2>

のprohibited this product from being savedを日本語に書き直します。

例えば:

<h2><%= pluralize(@product.errors.count, "") %> 個の間違いがあります。:</h2>

これでvalidateの表示が日本語に変更されます。

※ちなみにメッセージを変更したい場合は、ja.ymlを書き直すことでできます。

i18n__generatorsを使う

Gemfileにライブラリを追加します。

$vim Gemfile

一行付け加えます。

gem ‘i18n_generators’
ライブラリーをインストールします。

$bundle install

railsのgeneratorでi18nが使えるようになります。

$rails g i18n ja

config/application.rbがある場合は上書きされるので、
もし変更しているものがあれば別名で保存していたほうがいいかもです。
下記のファイルが生成されます。

conflict config/application.rb
create config/locales/ja.yml
create config/locales/translation_ja.yml

日本語の文章がcontrollerでも使えるようになります。


コメント

そのまま使う場合は、ja.yaml をダウンロードしてくるより rails-i18n を Gemfile に書いたほうが良いかと。

2011年10月17日2:34 AM | sugi

sugiさんコメントありがとうございます。
sugiさんの言われるとおりですね。勉強させて頂き、文章を追加させて頂きました。

2011年10月27日6:18 PM | shu

コメントする