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 installrailsのgeneratorでi18nが使えるようになります。
$rails g i18n jaconfig/application.rbがある場合は上書きされるので、
もし変更しているものがあれば別名で保存していたほうがいいかもです。
下記のファイルが生成されます。conflict config/application.rb create config/locales/ja.yml create config/locales/translation_ja.yml日本語の文章がcontrollerでも使えるようになります。
そのまま使う場合は、ja.yaml をダウンロードしてくるより rails-i18n を Gemfile に書いたほうが良いかと。
sugiさんコメントありがとうございます。
sugiさんの言われるとおりですね。勉強させて頂き、文章を追加させて頂きました。