Я только что столкнулся с этой проблемой и исправил ее с помощью простой модификации Bootstrap CSS.
Мой обычный код поля:
<div class="control-group">
<%= f.label :fieldname, t('models.model.fieldname'), :class => "control-label" %>
<div class="controls">
<%= f.text_field :fieldname, :class => 'input-large' %>
</div>
</div>
Поскольку я использую f.label
и f.text_field
, метка и входные данные инкапсулированы в div с классом field_with_errors
(как упоминает Николас), в результате чего получается HTML:
<div class="control-group">
<div class="field_with_errors"><label class="control-label" for="model_fieldname">Field name</label></div>
<div class="controls">
<div class="field_with_errors"><input class="input-large" id="model_fieldname" name="model[fieldname]" size="30" type="text" value=""></div>
</div>
</div>
Чтобы они выглядели так же, как стиль Bootstrap <div class="control-group error">
, я добавил несколько дополнительных селекторов в bootstrap.css
. Я нахожу все ссылки на .control-group.error ...
и добавляю повторяющиеся строки с .control-group .field_with_errors ...
. В итоге я получаю такую вещь:
.control-group.error > label,
.control-group.error .help-block,
.control-group.error .help-inline,
.control-group .field_with_errors > label,
.control-group .field_with_errors .help-block,
.control-group .field_with_errors .help-inline {
color: #b94a48;
}
Возможно, это не самый элегантный способ сделать это для Rails, но мне он показался намного проще, чем более зависимые гемы или переопределение обработки ошибок. Да, вам придется вносить одни и те же изменения каждый раз, когда вы обновляете Bootstrap, но это довольно простые изменения, и вы, вероятно, могли бы сделать файл патча, чтобы сделать это автоматически.