Вы находитесь на правильном пути с переносом в div, но вы можете сделать это следующим образом:
<%= f.error_message_on "name",
:css_class => "inputError" %>
Вероятно, есть много способов сделать это. Наличие возврата контроллера RJS является одним из способов. Чтобы быть ненавязчивым, считается оптимальной практикой, вам нужно будет включить файл javascript, который запускает метод scriptaculous при загрузке страницы. Я использую низкопрофильную библиотеку для ненавязчивого JavaScript. Вот мое предложение:
файл макета:
<%= javascript_include_tag :defaults, ‘lowpro’, 'form_behaviors.js' %>
javascript_file_for_form_actions.js:
Event.addBehavior({
'.inputError' : function() {
this.hide();
this.blindUp();
}
});
Вы также можете условно загрузить файл javascript с помощью content_for и изменить файл макета.
Просмотр файла:
<% content_for(:javascript) do %> <%= javascript_include_tag “form_behaviors” %>
<% end %>
Где-то в файле макета:
<% yield :javascript %>
Вы можете получить ненавязчивый плагин , который также включает lowpro для вас. Для получения дополнительной информации Peepcode содержит хороший pdf о lowpro, а также несколько хороших скринкастов на javascript.