{"id":978,"date":"2012-12-10T13:06:18","date_gmt":"2012-12-10T04:06:18","guid":{"rendered":"http:\/\/www.techscore.com\/blog\/?p=978"},"modified":"2018-11-14T16:33:58","modified_gmt":"2018-11-14T07:33:58","slug":"%e3%83%86%e3%82%b9%e3%83%88%e3%82%b3%e3%83%bc%e3%83%89%e3%81%a7%e3%83%90%e3%83%aa%e3%83%87%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e6%a4%9c%e8%a8%bc%e3%81%99%e3%82%8b","status":"publish","type":"post","link":"https:\/\/www.techscore.com\/blog\/2012\/12\/10\/%e3%83%86%e3%82%b9%e3%83%88%e3%82%b3%e3%83%bc%e3%83%89%e3%81%a7%e3%83%90%e3%83%aa%e3%83%87%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e6%a4%9c%e8%a8%bc%e3%81%99%e3%82%8b\/","title":{"rendered":"\u30c6\u30b9\u30c8\u30b3\u30fc\u30c9\u3067\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3092\u691c\u8a3c\u3059\u308b"},"content":{"rendered":"<p>\u3053\u3093\u306b\u3061\u306f\u3001\u9234\u6728\u3067\u3059\u3002<\/p>\n<p>\u30c6\u30b9\u30c8\u30b3\u30fc\u30c9\u3067\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306e\u691c\u8a3c\u3092\u884c\u3046\u3068\u304d\u306e\u8a71\u3067\u3059\u3002<\/p>\n<p>\u4ee5\u4e0b\u306e\u3088\u3046\u306a User \u30af\u30e9\u30b9\u304c\u3042\u308b\u3068\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"lang:ruby decode:true\">class User &lt; ActiveRecord::Base\r\n\r\n  attr_accessible :name, ...\r\n\r\n  validates :name,\r\n            :presence =&gt; true,\r\n            :length   =&gt; {:allow_blank =&gt; true, :maximum =&gt; 20} \r\n\r\nend<\/pre>\n<p>\u3053\u306e User \u30af\u30e9\u30b9\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306e\u30c6\u30b9\u30c8\u3092\u66f8\u304f\u5834\u5408\u306b\u3001\u3069\u306e\u3088\u3046\u306a\u30c6\u30b9\u30c8\u30b3\u30fc\u30c9\u3092\u66f8\u304d\u307e\u3059\u304b\uff1f<\/p>\n<p>\u3053\u3093\u306a\u611f\u3058\u3001\u30fb\u30fb\u30fb\u3060\u3068\u30c6\u30b9\u30c8\u3068\u3057\u3066\u5c11\u3057\u7de9\u3044\u3067\u3059\u306d\u3002<\/p>\n<pre class=\"lang:ruby decode:true\">assert User.new(:name =&gt; '\u305f\u308d\u3046').valid?<\/pre>\n<p>\u3067\u304d\u308c\u3070 valid? \u306e\u623b\u308a\u5024\u3060\u3051\u3067\u306f\u306a\u304f\u3001\u30a8\u30e9\u30fc\u306e\u7a2e\u985e\uff08blank \u306a\u306e\u304b too_long \u306a\u306e\u304b\u3001\u306a\u3069\uff09\u3082\u691c\u8a3c\u3067\u304d\u308b\u3068\u5b09\u3057\u3044\u3067\u3059\u3002<\/p>\n<p>\u3068\u3044\u3046\u3053\u3068\u3067\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30e1\u30bd\u30c3\u30c9\u3092\u66f8\u3044\u3066\u307f\u307e\u3057\u305f\u3002<\/p>\n<pre class=\"lang:ruby decode:true\"># \r\n# \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30a8\u30e9\u30fc\u3092\u691c\u8a3c\u3059\u308b. \r\n#\r\n# ==== \u8a73\u7d30\r\n# \u4ee5\u4e0b\u306e\u5024\u304c\u4e00\u81f4\u3059\u308b\u3053\u3068\u3092 assert_equal \u3067\u691c\u8a3c\u3059\u308b. \r\n#\r\n# * [I18n.translate(\"activerecord.errors.messages.#{error_type}\", replacements)]\r\n# * object.errors[attribute]\r\n#\r\n# error_type \u304c nil \u306e\u5834\u5408\u306f, object.errors[attribute] \u304c\u7a7a\u3067\u3042\u308b\u3053\u3068\u3092\u691c\u8a3c\u3059\u308b.\r\n#\r\n# ==== \u5f15\u6570\r\n# object:: \u691c\u8a3c\u5bfe\u8c61\u306e ActiveRecord \u30aa\u30d6\u30b8\u30a7\u30af\u30c8.\r\n# attribute:: \u691c\u8a3c\u5bfe\u8c61\u306e\u5c5e\u6027\u540d.\r\n# error_type:: \u30a8\u30e9\u30fc\u306e\u7a2e\u985e (:blank, :too_long, ...).\r\n# replacements:: \u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u7f6e\u63db\u3059\u308b\u5024 (Ex. {:count =&gt; 10}).\r\n#\r\ndef assert_error_message(object, attribute, error_type, replacements={})\r\n  if error_type\r\n    replacements = replacements.reverse_merge(:attribute =&gt; object.class.human_attribute_name(attribute))\r\n    assert_equal [I18n.translate(\"activerecord.errors.messages.#{error_type}\", replacements)], object.errors[attribute]\r\n  else\r\n    assert_blank object.errors[attribute]\r\n  end\r\nend<\/pre>\n<p>\u4e0a\u8a18\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001User \u30af\u30e9\u30b9\u306e\u30c6\u30b9\u30c8\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<pre class=\"lang:default decode:true\"># \u540d\u524d\u304c\u672a\u5165\u529b\u306e\u5834\u5408\u306f NG.\r\nuser = User.new.tap(&amp;:valid?)\r\nassert_error_message user, :name, :blank<\/pre>\n<pre class=\"lang:default decode:true\"># \u540d\u524d\u3092\u5165\u529b\u3059\u308c\u3070 OK.\r\nuser = User.new(:name =&gt; '\u305f\u308d\u3046').tap(&amp;:valid?)\r\nassert_error_message user, :name, nil<\/pre>\n<pre class=\"lang:default decode:true\"># \u540d\u524d\u304c 20 \u6587\u5b57\u306e\u5834\u5408\u306f OK.\r\nuser = User.new(:name =&gt; 'x' * 20).tap(&amp;:valid?)\r\nassert_error_message user, :name, nil<\/pre>\n<pre class=\"lang:default decode:true\"># \u540d\u524d\u304c 20 \u6587\u5b57\u3092\u8d8a\u3048\u308b\u5834\u5408\u306f NG.\r\nuser = User.new(:name =&gt; 'x' * 21).tap(&amp;:valid?)\r\nassert_error_message user, :name, :too_long, :count =&gt; 20<\/pre>\n<p>\u300cassert User.new(:name =&gt; '\u305f\u308d\u3046').valid?\u300d\u3088\u308a\u306f\u3060\u3044\u3076\u826f\u304f\u306a\u3063\u305f\u304b\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<p>\u3082\u3063\u3068\u826f\u3044\u65b9\u6cd5\u304c\u7121\u3044\u304b\u3001\u4eca\u3082\u8003\u3048\u4e2d\u3067\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u3053\u3093\u306b\u3061\u306f\u3001\u9234\u6728\u3067\u3059\u3002<\/p>\n<p>\u30c6\u30b9\u30c8\u30b3\u30fc\u30c9\u3067\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306e\u691c\u8a3c\u3092\u884c\u3046\u3068\u304d\u306e\u8a71\u3067\u3059\u3002<\/p>\n<p>\u4ee5\u4e0b\u306e\u3088\u3046\u306a User \u30af\u30e9\u30b9\u304c\u3042\u308b\u3068\u3057\u307e\u3059\u3002<br \/><a href=\"https:\/\/www.techscore.com\/blog\/2012\/12\/10\/%e3%83%86%e3%82%b9%e3%83%88%e3%82%b3%e3%83%bc%e3%83%89%e3%81%a7%e3%83%90%e3%83%aa%e3%83%87%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e6%a4%9c%e8%a8%bc%e3%81%99%e3%82%8b\/\">\u7d9a\u304d\u3092\u8aad\u3080...<\/a><\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[18],"tags":[22,60],"_links":{"self":[{"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/posts\/978"}],"collection":[{"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/comments?post=978"}],"version-history":[{"count":1,"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/posts\/978\/revisions"}],"predecessor-version":[{"id":18007,"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/posts\/978\/revisions\/18007"}],"wp:attachment":[{"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/media?parent=978"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/categories?post=978"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/tags?post=978"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}