<< >>

2005-08-02 Í¥¤·¤¤Rails¤Î°é¤ÆÊý [ĹǯÆüµ­]

¡ü [rails] Validations

¤¢¤ë ActiveRecord ¥ª¥Ö¥¸¥§¥¯¥È¤ÎÆâÉô¾õÂÖ¤¬´üÂÔ¤¹¤ëÃͤ«¤É¤¦¤«¤ò¸¡ºº¤¹¤ë¤Î¤¬validation µ¡Ç½¤Ç¤¹¡£Î㤨¤Ð¡¢¤¢¤ëÊÑ¿ô(¾õÂÖ)¤¬¡¢¶õÃÍ¡¢·è¤Þ¤Ã¤¿Èϰϡ¢ÆÃÄê¤ÎÀµµ¬É½¸½¤Ë¥Þ¥Ã¥Á¡¢¤Ç¤¢¤ë¤«¤É¤¦¤«¤È¤¤¤Ã¤¿¸¡ºº¤òÄêµÁ¤·¤Þ¤¹¡£ÄêµÁ¤¹¤ë¤Ë¤Ï¡¢ActiveRecord::Base#validate ¤ò override ¤·¤Þ¤¹¡£validate_on_create ¤ä validate_on_update ¤Ê¤É¤Ë´Ø¤·¤Æ¤âƱÍͤǤ¹¡£

  • validate_on_create: ¥ª¥Ö¥¸¥§¥¯¥È¤¬¿·µ¬¤ËºîÀ®¤µ¤ì¤¿¤È¤­¤Ë¤Î¤ß¼Â¹Ô¤µ¤ì¤Þ¤¹
  • validate_on_update: ¥ª¥Ö¥¸¥§¥¯¥È¤¬¹¹¿·¤µ¤ì¤¿¤È¤­¤Î¤ß¼Â¹Ô¤µ¤ì¤Þ¤¹
  • validate: ¿·µ¬¡¦¹¹¿·¤Î¤É¤Á¤é¤Î¾ì¹ç¤Ç¤â¼Â¹Ô¤µ¤ì¤Þ¤¹

validate ¤È validate_on_* ¤ÎξÊý¤¬ÄêµÁ¤µ¤ì¤¿¾ì¹ç¤Ï¡¢validate ¤ÎÊý¤¬Àè¤Ë¼Â¹Ô¤µ¤ì¤Þ¤¹¡£

¡ü validate ¤ÎÄêµÁ

¤Ç¤Ï¡¢validate ¤òÄêµÁ¤·¤Æ¤ß¤Þ¤¹¡£¥¨¥é¡¼(¤¤¤ï¤æ¤ëÁÛÄê³°¤ÎÃÍ)¤¬È¯À¸¤·¤¿¾ì¹ç¤Ï¥¨¥é¡¼½èÍýÍÑ¥ª¥Ö¥¸¥§¥¯¥È(errors)¤òÍøÍѤ¹¤ë¤³¤È¤¬¿ä¾©¤µ¤ì¤Æ¤¤¤Þ¤¹¡£É¬¿Ü¤Ç¤Ï¤Ê¤¤¤Î¤Ç¼«Á°¤Ç´ÉÍý¤·¤Æ¤âÂç¾æÉפÀ¤È»×¤¤¤Þ¤¹¤¬¡¢errors ¤òÍøÍѤ¹¤ë¤È°Ê²¼¤Î2ÅÀ¤Î¥á¥ê¥Ã¥È¤¬¤¢¤ê¤Þ¤¹¡£

  1. °ìÈÌŪ¤Ê¸¡¾Úµ¡Ç½¤¬¥á¥½¥Ã¥É¤ÇÍѰդµ¤ì¤Æ¤¤¤ë¡£
  2. helper ¤Î error_messages_for ¤Ë¤è¤ë¥¨¥é¡¼É½¼¨¤Î²¸·Ã¤ò¼õ¤±¤é¤ì¤ë¡£

¤Þ¤º¤Ï¡¢´Êñ¤ÊÆþÎÏ¥Á¥§¥Ã¥¯¤ò¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£

class Berryz < ActiveRecord::Base
  def validate
    if name.to_s.empty?
      errors.add(:name, "¤¬ÆþÎϤµ¤ì¤Æ¤¤¤Þ¤»¤ó")
    end
  end

errors ¤òÍøÍѤ¹¤ë¾ì¹ç¤Ï¡¢¤³¤Î¤è¤¦¤Ë add ¥á¥½¥Ã¥É¤Ç¥¨¥é¡¼¾ðÊó¤òÄɲ䷤Ƥ¤¤­¤Þ¤¹¡£Âè°ì°ú¿ô(ɬ¿Ü)¤Ë¤Ï¥¨¥é¡¼¤Îµ¯¤­¤¿Í×ÁÇ̾(¥«¥é¥à̾)¤òÆþ¤ì¡¢ÂèÆó°ú¿ô(¾Êά²Ä)¤Ë¤Ïɽ¼¨¤¹¤ë¥á¥Ã¥»¡¼¥¸¤òÆþ¤ì¤Þ¤¹¡£¾Êά¤¹¤ë¤È¥Ç¥Õ¥©¥ë¥È¤Î±Ñ¸ì¤Î¥á¥Ã¥»¡¼¥¸¤Ë¤Ê¤ê¤Þ¤¹¡£

¡ü ¥á¥ê¥Ã¥È1: °ìÈÌŪ¤Ê¸¡¾Úµ¡Ç½

º£¤Î¶õʸ»úÎó¥Á¥§¥Ã¥¯¤âÁȤ߹þ¤ß¤Ç½àÈ÷¤µ¤ì¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢errors¤òÍøÍѤ¹¤ë¾ì¹ç¤Ï¤½¤ì¤òÍøÍѤ¹¤ëÊý¤¬¤è¤¤¤Ç¤·¤ç¤¦¡£

class Berryz < ActiveRecord::Base
  def validate
    errors.add_on_empty %w( name ), "¤¬ÆþÎϤµ¤ì¤Æ¤¤¤Þ¤»¤ó"
  end
end

Âè°ì°ú¿ô¤Ë¥Á¥§¥Ã¥¯¤·¤¿¤¤¥«¥é¥à̾(¤â¤·¤¯¤Ï°À­Ì¾)¤òÎóµó¤Ç¤­¤ë¤Î¤Ç¡¢Ê£¿ô¤Î¹àÌܤò¸¡ºº¤¹¤ë¤È¤­¤Ëµ­½Ò¤¬¤¹¤Ã¤­¤ê¤·¤Þ¤¹¡£°Ê²¼¤Î¸¡¾Úµ¡Ç½(errors¤Î¥á¥½¥Ã¥É)¤¬ÍøÍѲÄǽ¤Ç¤¹¡£

  • add_on_blank # Rails³ÈÄ¥Object¤ÎObject#blank? ¤Ë¤è¤ë¸¡ºº ("", " ", nil, 0)
  • add_on_boundary_breaking # Èϰϥª¥Ö¥¸¥§¥¯¥È(range)¤Ë¤è¤ë¸¡ºº
  • add_on_empty # empty? ¤Ë¤è¤ë¸¡ºº

¤Þ¤¿¡¢¤É¤Î¥«¥é¥à¤Ë¤â·ë¤Ó¤Ä¤«¤Ê¤¤¤±¤É¥¨¥é¡¼¤òɽ¼¨¤µ¤»¤¿¤¤¾ì¹ç¤Ï¡¢

  • add_to_base

¤òÍøÍѤ·¤Þ¤¹¡£°Ê²¼¡¢ÍøÍÑÎã¤Ç¤¹¡£

class Berryz < ActiveRecord::Base
  def validate
    errors.add_on_blank %w( name ), "¤¬ÆþÎϤµ¤ì¤Æ¤¤¤Þ¤»¤ó"
    errors.add_on_boundary_breaking %w( password ), (1..8), "¤Î¥µ¥¤¥º¤¬¾å¸Â(%d)¤òͤ¨¤Æ¤¤¤Þ¤¹"
  rescue
    errors.add_to_base "²¿¤«ÍͻҤ¬ÊѤǤ¹"
  end
end

¡ü ¥á¥ê¥Ã¥È2: ¥¨¥é¡¼É½¼¨µ¡Ç½(error_messages_for)

edit.rhtml ¤ÎÃæ¤Ë <%= error_messages_for :berryz %> ¤òÄɲ䷤Ƥߤޤ·¤ç¤¦¡£¤³¤Î¥Ø¥ë¥Ñ¡¼¥á¥½¥Ã¥É¤Ï errors ¥ª¥Ö¥¸¥§¥¯¥È¤ÎÍ×ÁǤ¬¶õ¤Ç¤Ê¤¤¤È¤­¤Ë¡¢¼«Æ°Åª¤Ë·Ù¹ðÍѤÎʸ¸À¤òÊÖ¤·¤Þ¤¹¡£°ú¿ô¤Ë¤Ï edit ¥¢¥¯¥·¥ç¥ó¤ÇÍøÍѤ·¤Æ¤¤¤ë¥ª¥Ö¥¸¥§¥¯¥È(¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô)¤Î̾Á°¤¬Æþ¤ê¤Þ¤¹¡£ºîÀ®¤·¤¿¥â¥Ç¥ë(AcitveRecord¤Î¥µ¥Ö¥¯¥é¥¹)¤Î̾Á°¤Ç¤Ï¤Ê¤¤¤Î¤ÇÃí°Õ¤·¤Þ¤·¤ç¤¦¡£

# app/views/berryz/edit.rhtml
<%= stylesheet_link_tag 'scaffold' %> # ¢« public/stylesheets/scaffold.css ¤òÍѰդ·¤Æ¤ª¤¯(¿§ÉÕ¤±ÍÑ)
<%= start_form_tag :action => 'update', :id => @berryz %>
  <%= error_messages_for 'berryz' %>
  <p>̾Á°: <%= text_field 'berryz', 'name' %></p>
  <p>¥Ñ¥¹¥ï¡¼¥É: <%= text_field 'berryz', 'password' %></p>
  <%= submit_tag 'ÅÐÏ¿' %>
<%= end_form_tag %>

¤¹¤ë¤È¡¢error_messages_for Éôʬ¤Ë¤³¤Î¤è¤¦¤Ê¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤¬É½¼¨¤µ¤ì¤Þ¤¹¡£

error_messages_for1.png

scaffold.css ¤Î¾ì½ê¤ä error_messages_for Åù¤Î½ñ¼°¤¬¤ï¤«¤ê¿É¤¤¾ì¹ç¤Ï¡¢°ìÅÙ generate scaffold ¤Ç¥Æ¥ó¥×¥ì¡¼¥È°ì¼°¤òºî¤Ã¤Æ¤ß¤ë¤È¤è¤¤¤Ç¤·¤ç¤¦¡£¤½¤Î¾ì¹ç¡¢app/views/(¥â¥Ç¥ë̾)/_form.rhtml ¤¬¾åµ­¤Î edit.rhtml ¤ËÁêÅö¤·¤Þ¤¹¡£

¡ü Àë¸ÀŪ¤ÊÄêµÁ

º£¤Þ¤Ç¤Ï¥¤¥ó¥¹¥¿¥ó¥¹¥á¥½¥Ã¥É¤È¤·¤Æ validate* ¤òÄêµÁ¤·¤Æ¤­¤Þ¤·¤¿¤¬¡¢Rails ¤ªÆÀ°Õ¤Î´Ø¿ô·¿¤È¤¤¤¦¤«Àë¸ÀŪ¤ÊÄêµÁ¤Ç¤â²Äǽ¤Ç¤¹¡£

   class Account < ActiveRecord::Base
     validates_presence_of     :subdomain, :name, :email_address, :password
     validates_uniqueness_of   :subdomain
     validates_acceptance_of   :terms_of_service, :on => :create
     validates_confirmation_of :password, :email_address, :on => :create
   end

к¡Çw¡Ç) ¡ã¤³¤¦¤¤¤¦½ñ¼°¤Ã¤ÆRails¤Ç¿ÍѤµ¤ì¤Æ¤ë¤è¤Í¡¼¡£

Àî¡­¡¦_¡¦¡®Àî¡ã³Î¤«¤Ëñ½ã¤Ê¤â¤Î¤Ê¤é¥á¥½¥Ã¥É¤è¤ê¤â¸«±É¤¨¤Ï¤¤¤¤¤±¤É¡£

ŽÙ üý-üýŽØ ¡ã¥í¥¸¥Ã¥¯¤¬Æþ¤Ã¤ÆÄ¹¤¯¤Ê¤ë¤ÈµÕ¤Ë²ÄÆÉÀ­¤ò»¤Ê¤¦½ô¿Ï¤Î·õ¡£

кoŽß¡¼Žßк ¡ã°Õ¿ÞÄ̤ê¤Î validation ¤Î¸¡ººµ¡Ç½¥á¥½¥Ã¥É¤¬¤Ê¤¤¤È»È¤¨¤Ê¤¤¤Î¤Ç¤¹¡£

к ¡­¢à¡®Ðº¡ã±Ñ¸ì¤ÈÆüËܸì¤Î°ã¤¤¤â¤¢¤ë¤«¤â¤·¤ì¤Ê¤¤¤±¤É¡¢¤Ê¤«¤Ê¤«¥Õ¥£¥Ã¥È¤·¤Ê¤¤¤Ç¤¹¤Í¡¼¡£

ŽÉŽÉl¢ß_¢ß'ŽÙ ¡ã¤³¤³¤é¤Ø¤ó¤Î presence, uniqueness, ... ¤Ï¥¤¥ó¥¹¥¿¥ó¥¹¥á¥½¥Ã¥É¤Ç¤ÏÍѰդµ¤ì¤Æ¤Ê¤¤¤·¡£

½£*¡Æ o¡ÆŽØ ¡ãÈù̯¤Ç¤¹¡¼¡£

ŽÉŽÉl¢ß_¢ß'ŽÙ ¡ã¤Ç¡¢uniqueness ¤ÏÁ´·ï¥µ¡¼¥Á¤¹¤ë¤Î¤Ç index Ä¥¤Ã¤Æ¤Ê¤¤¥«¥é¥à¤Ç»È¤Ã¤Á¤ã¤¦¤È¡¢¡¢¡¢

½£*¡Æ o¡ÆŽØ ¡ãÉݤ¤¤ó¤Ç¤¹¤±¤É¡£ËÜÅö¤ËÉݤ¤¤ó¤Ç¤¹¤±¤É¡£

¡Ê¡­(Ž´)¡®¡Ë޲¡ã¤½¤·¤Æ¡¢index ¤òÄ¥¤ë¤Ê¤é¤½¤Î¤Þ¤Þ unique index ¤Ë¤¹¤ë¥¯¥Þ¡¼¡£

ŽÙ üý-üýŽØ ¡ã¤³¤ìÁ´ÉôÍפé¤Ê¤¤¤«¤é ActiveRecord::Errors#add_on_regexp ¤­¤Ü¤ó¡£

ŽÉŽÉl¢ß_¢ß'ŽÙ ¡ã¤³¤¦¤¤¤¦Àë¸À¤À¤±¤Çºî¤ì¤¿¤é³Î¤«¤Ë¥³¡¼¥É¤Ï¤«¤Ã¤³¤¤¤¤¤±¤É¡¢¡¢¡¢

½£*¡Æ o¡ÆŽØ ¡ã¤½¤¦¤ä¤Ã¤Æ°ìÈÖ¤¦¤Þ¤¯¤¤¤Ã¤¿Îã(¥³¡¼¥É)¤ò¡ÖRails¤ÎÀ¸»ºÀ­¡×¤È¤·¤Æëð¤¦Î®¤ì¤Ë¤Ê¤ë¤Î¤Ï·ù¤À¤è¤Í¡£

ŽÙ üý-üýŽØ ¡ãRails²ûµ¿ÇɤοͤϤ½¤¦¤¤¤¦Æ÷¤¤¤ò´¶¤¸¤Æ¤ë¤Î¤«¤â¡£(»²¹Í: http://funk.exblog.jp/2335721/ )

¡Ê¡­(Ž´)¡®¡Ë޲¡ãscaffold ¤ÎÆ÷¤¤¤¬¤¹¤ë¥¯¥Þ¡¼¡£

ŽÉŽÉl¢ß_¢ß'ŽÙ ¡ãscaffold 1¹Ô¤Ç½ñ¤±¤ë¤³¤È¤è¤ê¤â¡¢scaffold ¤¬ºî¤Ã¤¿¥á¥½¥Ã¥É¤ÎÃæ¤Ë¶Å½Ì¤µ¤ì¤Æ¤ë¥³¡¼¥É¤ÎÊý¤¬Rails¤ÎËܼÁ¤À¤è¤Í¢ö

½£*¡Æ o¡ÆŽØ ¡ã¤¦¤ó¡£¤¢¤Î list, show, edit, destroy ¤¬ËؤÉ1¹Ô¤ÊÊý¤¬À¨¤¤¤è¤Í¡£

к¡Çw¡Ç) ¡ã·ë²ÌŪ¤ËÀë¸ÀŪ¤Ê¤é¤¤¤¤¤±¤É¡¢¤½¤³¤¬ÌÜŪ¤Ë¤Ê¤é¤Ê¤¤¤è¤¦¤Ë¤·¤¿¤¤¤Í¢ö

¡ü ¥á¥Ã¥»¡¼¥¸¤ÎÆüËܸ첽

°ìÉô¤ÏÆüËܸì¤Ë¤Ê¤ê¤Þ¤·¤¿¤¬¡¢¥á¥Ã¥»¡¼¥¸¤ò´°Á´¤ËÆüËܸ첽¤¹¤ë¤Ë¤Ï¼¡¤Î3¤Ä¤Î´ØÌç¤òÆÍÇˤ·¤Ê¤¯¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó¡£(Rails¤Ï¤Þ¤ÀóÕÌÀ´ü¤Ê¤Î¤Ç localization ¤¬µ´Ìç¤Ç¤¹)

  1. ¥¨¥é¡¼¤ÎÆâÍÆ¾ÜºÙ¥á¥Ã¥»¡¼¥¸
  2. ¥¨¥é¡¼¤Î¥«¥é¥à̾(¾å¤Î "Password" ¤ÎÉôʬ)
  3. ¥¨¥é¡¼¤Î¥¿¥¤¥È¥ë(¸«½Ð¤·)

1¤Ï´û¤ËÂбþ¤·¤Þ¤·¤¿¤¬¡¢@@default_error_messages¤Ë¤è¤Ã¤Æ¤Þ¤È¤á¤ÆÀßÄꤹ¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¤Î¤Ç¡¢¤½¤Á¤é¤â¾Ò²ð¤·¤Þ¤¹¡£

module ActiveRecord
  class Errors
    @@default_error_messages = {
      :empty     => "¤¬ÆþÎϤµ¤ì¤Æ¤¤¤Þ¤»¤ó",
      :invalid   => "¤¬ÉÔÀµ¤ÊÃͤǤ¹",
      :too_long  => "¤Î¥µ¥¤¥º¤¬¾å¸Â(%d)¤òͤ¨¤Æ¤¤¤Þ¤¹",
#      :inclusion => "is not included in the list",
#      :exclusion => "is reserved",
#      :invalid => "is invalid",
#      :confirmation => "doesn't match confirmation",
#      :accepted  => "must be accepted",
#      :empty => "can't be empty",
#      :blank => "can't be blank",
#      :too_long => "is too long (max is %d characters)", 
#      :too_short => "is too short (min is %d characters)", 
#      :wrong_length => "is the wrong length (should be %d characters)", 
#      :taken => "has already been taken",
#      :not_a_number => "is not a number",
    }
  end
end

2¤Ï Rails ¦¤Ë¤ÏÍѰդµ¤ì¤Æ¤¤¤Ê¤¤¤Î¤Ç¡¢ActiveRecord.human_attribute_name¤ò̵ÍýÌðÍý¾è¤Ã¼è¤ë¤³¤È¤Ë¤·¤Þ¤¹¡£¤³¤ì¤Ï "user_name" ¢ª "User Name" ¤Î¤è¤¦¤Ë¥«¥é¥à̾¤ò¿Í¤¬ÆÉ¤ß¤ä¤¹¤¤·Á¤ËÊÑ´¹¤¹¤ë¥á¥½¥Ã¥É¤Ê¤Î¤Ç¡¢É½¼¨Éôʬ°Ê³°¤Ç¤Ï»È¤ï¤ì¤Ê¤¤¤Ï¤º¤À¤È´üÂԤǤ­¤Þ¤¹¡£(¾­ÍèŪ¤Ë»ÅÍͤ¬Êѹ¹¤µ¤ì¤Æ¤â¤³¤ÎÆüËܸ첽¤¬Ìµ¸ú¤Ë¤Ê¤ë¤°¤é¤¤¤Ç¸íưºî¤Î¿´ÇۤϤʤ¤¤Ç¤·¤ç¤¦)¡£

class Kids < ActiveRecord::Base
  class << self
    HUMANIZED_ATTRIBUTE_KEY_NAMES = {
      "name"     => "̾Á°",
      "password" => "¥Ñ¥¹¥ï¡¼¥É",
    }
    
    def human_attribute_name(attribute_key_name)
      HUMANIZED_ATTRIBUTE_KEY_NAMES[attribute_key_name] || super
    end
  end

error_messages_for2.png

¤³¤³¤Þ¤Ç¤­¤¿¤é¸å¤Ï¸«½Ð¤·¤Îɽ¼¨Éôʬ¤Î3¤ò»Ä¤¹¤Î¤ß¤Ç¤¹¡£¤³¤ì¤Ïʸ»úÎó¤òÃÖ¤­´¹¤¨¤ë¤À¤±¤Ê¤Î¤Ç³Ú¾¡¤Ç¤·¤ç¤¦¡£¥³¡¼¥Ò¡¼¤Ç°ìÉþ¤·¤Ê¤¬¤é "There were problems with the following" ¤ò grep¤·¤Æ¥½¡¼¥¹¤òõ¤¹¤³¤È¤Ë¤·¤Þ¤·¤ç¤¦¡£

validation-error_message_for.jpg

к¡ô¡Çw¡Ç) ¡ã¤Ê¤ó¤¸¤ã¤³¤ê¤ã¡¼¡ª¡ª

½£*;¡Æ o¡ÆŽØ ¡ãÎϰìÇÕËä¤á¹þ¤ó¤Ç¤¢¤ë¤ó¤Ç¤¹¤±¤É¡¢¡¢¡¢

ŽÙ üý-üýŽØ ¡ã½ªÎ»¡Á¡£

Àî¡­¡¦_¡¦¡®Àî¡ã°ì±þÊó¹ð http://dev.rubyonrails.com/ticket/1089 ¤Ï¤µ¤ì¤Æ¤Þ¤¹¤Í¡£

кoŽß¡¼Žßк ¡ã¤Ç¤ì¤Ç¤ì¡Á¡¢¤¢¤¥¤¢¤¥¤¢¡Á¢ö

 <%= error_messages_for(:berryz).sub(/There were problems with the following fields:/,
       "¤³¤Î¥Õ¥£¡¼¥ë¥É¤ÏÌäÂ꤬¤¢¤ë¤È¤æ¤¤¤¿¤¤¤Ç¤¹") %>

ŽÉŽÉl;¢ß_¢ß'ŽÙ ¡ã¤Þ¡¼¤µ¤Á¤ã¤ó¡¢¾Ð´é¤Ç²¿¤Ö¤Ã¤½¤¦¤Ê¤³¤È¤ä¤Ã¤Æ¤ë¤Î¡ª

кoT¡¼Tк¡ã¤¢¤¦¤¡¡Á¡¢¤¢¡Á¤Ð¤Ð¤¦¡Á¤¢¡Á¤¢¡Á¤¦¡Á

к ¡­¢à¡®Ðº¡ã¤Þ¡¼¤µ¤ÏÌÀÆü¤¬Ç¼ÉʤǾǤäƤë¤ó¤À¤è¤Í¡¼¡£

½£*¡Æ o¡ÆŽØ ¡ã²Ä°¥ÁÛ¤À¤«¤é ApplicationHelper ¤Ë¥á¥½¥Ã¥Éºî¤í¤Ã¤«¡£

ŽÉŽÉl¢ß_¢ß'ŽÙ ¡ã¤¸¤ã¤¢¡¢¤ê¡¼¡¢¤ª´ê¤¤¤Í¡£»ä¤Ï view ºî¤ë¤«¤é¡£

# app/helpers/application_helper.rb
def template_error_messages_for (object_name, options = {})
  options = options.symbolize_keys
  object = instance_variable_get("@#{object_name}")
  unless object.errors.empty?
    render :partial=>"system/error_messages_for",
      :locals=>{:messages=>object.errors.full_messages, :object=>object}
  end
end
# app/views/system/_error_messages_for.rhtml
<div class="errorExplanation" id="errorExplanation">
  <h2><%= messages.size %>¸Ä¤Î¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿</h2>
  <p>¼¡¤Î¹àÌܤËÌäÂ꤬¤¢¤ê¤Þ¤¹</p>
  <ul>
    <% for mes in messages %><li><%= mes %></li><% end %>
  </ul>
</div>

к¡Çw¡Ç) ¡ã¤³¤Î template_error_messages_for ¤òÊѤï¤ê¤Ë»È¤¨¤Ð¤¤¤¤¤ó¤À¤Í¢ö

template_error_messages_for.png

к¡Çw¡Ç) ¡ã¥Ç¥ì¥Ç¥ì!!¥·¥ó¥Ç¥ìLOVE!!

¤³¤ÎÆüµ­¤ÏÌÑÁÛÃˤµ¤ó¤È¾¾ÅÄÍ¥ºî»á¤ËÊû¤²¤Þ¤¹¡£

ËÜÆü¤Î¥Ä¥Ã¥³¥ß(Á´1·ï) [¥Ä¥Ã¥³¥ß¤òÆþ¤ì¤ë]
_ Catalina (2005-09-30 14:06)

½é¤á¤Þ¤·¤Æ¡£<br>message¤ÎÆüËܸ첽¡¢»²¹Í¤Ë¤µ¤»¤Æ¤¤¤¿¤À¤­¤Þ¤·¤¿¡£<br>µ®½Å¤ÊÆüËܸì¤Î¾ðÊ󤢤꤬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£<br><br>»ä¤Îºî¶ÈÆüµ­¤«¤é¾ðÊ󻲾ȥµ¥¤¥È¤È¤·¤Æ¾¡¼ê¤Ê¤¬¤é¤³¤ÎÆüÉÕ¤Î¥Ö¥í¥°¤ØÄ¾¥ê¥ó¥¯¤òޤ餻¤Æ¤¤¤¿¤À¤­¤Þ¤·¤¿¡¦¡¦¡¦¡£<br>¤â¤·²¿¤«ÌäÂ꤬¤¢¤ë¤è¤¦¤Ç¤·¤¿¤é¤ª¼ê¿ô¤Ç¤¹¤¬¡¦¡¦¡¦°ì¸À¤ª´ê¤¤¤·¤Þ¤¹¡£ttp://d.hatena.ne.jp/catalina/20050929