Как показать Сообщения об ошибках рядом с полем

Ctrl + Высокий звук + H на методе для получения иерархии вызовов для него. Быстрый способ видеть, откуда это называют.

29
задан Btuman 30 July 2013 в 20:57
поделиться

2 ответа

Вы можете использовать эту

- if @resource.errors[:field_name]
  ...

Также полезную ссылку:

http://guides.rubyonrails.org/active_record_validations.html#working-with- ошибки валидации

36
ответ дан 28 November 2019 в 01:42
поделиться

Как насчет

, если вы хотите поместить сообщение об ошибке прямо под текстовым полем, вы можете сделать это следующим образом

.row.spacer20top
  .col-sm-6.form-group
    = f.label :first_name, "*Your First Name:"
    = f.text_field :first_name, :required => true, class: "form-control"
    = f.error_message_for(:first_name)

Что такое error_message_for?
-> Ну, это прекрасный взлом, чтобы сделать что-то классное

# Author Shiva Bhusal
# Aug 2016
# in config/initializers/modify_rails_form_builder.rb
# This will add a new method in the `f` object available in Rails forms
class ActionView::Helpers::FormBuilder
  def error_message_for(field_name)
    if self.object.errors[field_name].present?
      model_name              = self.object.class.name.downcase
      id_of_element           = "error_#{model_name}_#{field_name}"
      target_elem_id          = "#{model_name}_#{field_name}"
      class_name              = 'signup-error alert alert-danger'
      error_declaration_class = 'has-signup-error'

      "<div id=\"#{id_of_element}\" for=\"#{target_elem_id}\" class=\"#{class_name}\">"\
      "#{self.object.errors[field_name].join(', ')}"\
      "</div>"\
      "<!-- Later JavaScript to add class to the parent element -->"\
      "<script>"\
          "document.onreadystatechange = function(){"\
            "$('##{id_of_element}').parent()"\
            ".addClass('#{error_declaration_class}');"\
          "}"\
      "</script>".html_safe
    end
  rescue
    nil
  end
end

Результат enter image description here

Разметка сгенерирована после ошибки

<div id="error_user_first_name" for="user_first_name" class="signup-error alert alert-danger">This field is required.</div>
<script>document.onreadystatechange = function(){$('#error_user_first_name').parent().addClass('has-signup-error');}</script>

Соответствующий SCSS

  .has-signup-error{
    .signup-error{
      background: transparent;
      color: $brand-danger;
      border: none;
    }

    input, select{
      background-color: $bg-danger;
      border-color: $brand-danger;
      color: $gray-base;
      font-weight: 500;
    }

    &.checkbox{
      label{
        &:before{
          background-color: $bg-danger;
          border-color: $brand-danger;
        }
      }
    }

Примечание: здесь используются переменные начальной загрузки, и не забудьте перезапустить сервер сейчас и после любого изменения файла в config dir.

4
ответ дан 28 November 2019 в 01:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: