validationエラー時にdivで囲わない
今はerror_message_onにhtml_tagというオプションが追加されて、好きなtagで囲めるようになりました。以下の記事のような対応は必要ありません。コメント感謝
railsのデフォのvalidationエラーはdivタグを使用する。
通常時
<%= error_message_on "post", "title" %> => <div class="formError">can't be empty</div> <%= text_field "post", "title", :size=>"20" %> => <div class="fieldWithErrors"> <input type="text" id="post_title" name="post[title]" size="20" value="#{@post.title}" /> </div>
携帯の画面をつくっているとき、divを使われてしまうと改行してしまう。
docomoはtableタグが使えないので、tableタグで回避することもできない。
inputフィールドのdivタグ回避
active_record_helper.rbには
module ActionView class Base @@field_error_proc = Proc.new{ |html_tag, instance| "<div class=\"fieldWithErrors\">#{html_tag}</div>" } cattr_accessor :field_error_proc end ... end
と書かれているのでこいつを、environment.rbかapprication_controller.rbで
ActionView::Base.field_error_proc = Proc.new{ |html_tag, instance| "<span class=\"fieldWithErrors\">#{html_tag}</span>" }
としてやればspanタグで回避してもらえる。
errorメッセージのdivタグ回避
active_record_helper.rbで
87: def error_message_on(object, method, prepend_text = "", append_text = "", css_class = "formError") 88: if (obj = instance_variable_get("@#{object}")) && (errors = obj.errors.on(method)) 89: content_tag("div", "#{prepend_text}#{errors.is_a?(Array) ? errors.first : errors}#{append_text}", :class => css_class) 90: else 91: '' 92: end 93: end
となっているので、これをapplication_helperでoverrideする。
def error_message_on(object, method, prepend_text = "", append_text = "", css_class = "formError") if (obj = instance_variable_get("@#{object}")) && (errors = obj.errors.on(method)) content_tag("span", "#{prepend_text}#{errors.is_a?(Array) ? errors.first : errors}#{append_text}", :class => css_class) else '' end end
これでspanで囲んでくれるようになった。
ただし、style指定はできないので、そのときはerror_message_on_hogeとかつくって使えばよろし。