Отобразить сообщение об ошибке формы без перезагрузки страницы

#ruby-on-rails #ruby #ruby-on-rails-6.1

Вопрос:

В приложении Rails 6.1 я переместил новое действие с отдельной страницы на модальную, и теперь я пытаюсь выяснить, можно ли отображать только сообщение об ошибке (в случае, если оно присутствует, например, «имя не может быть пустым») непосредственно в форме вместо перезагрузки всей страницы. Потому что даже в этом случае я бы не знал, как напрямую перезагрузить форму и отобразить сообщение об ошибке.

   def create
    @list = List.new(list_params)

    if @list.save
      redirect_to list_path(@list)
    else
      redirect_to root_path
    end
  end
 

Это форма, присутствующая в модальном, созданном с помощью simple_form

  <%= simple_form_for(@list) do |f| %>
          <%= f.error_notification %>
          <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %>
          <div class="form-inputs my-3">
            <%= f.input :name, required: true %>
          </div>
          <div class="form-actions">
            <%= f.button :submit %>
          </div>
        <% end %>
 

Альтернативным решением было бы использовать вспышки, но я был бы более рад, если бы сообщение об ошибке отображалось непосредственно в форме без перезагрузки всей страницы.

Если это поможет, на данный момент это мой проект

Ответ №1:

Я бы рекомендовал вам драгоценный камень client_side_validations в сочетании с client_side_validations-simple_form, поскольку вы используете simple_form . Это как раз то, что вы ищете.

Комментарии:

1. О, это именно то, что я искал! Спасибо. Я пытался это реализовать, но как-то не получается. Может быть, это что-то связано с конфигурацией. Чего я не понял из документации, так это того, на какой путь мне следует перенаправить, если @list.save является ложным?

2. Нет необходимости изменять конфигурацию контроллера, если она ложная, потому что при наличии ошибок плагин отобразит ошибку под полем (точно так же, как simple_form, но без перезагрузки страницы). Есть ли какие-либо ошибки в javascript в консоли?

3. В консоли не отображается сообщение об ошибке. Единственное поведение, которое я получаю, заключается в том, что как только я пытаюсь сохранить безымянный список, кнопка меняет значение с «Сохранить» (назначенное мной) на «Создать список». Я создал запрос на вытягивание для этой ветки, если вы хотите взглянуть на нее.

4. Я не могу запустить проект локально, потому что я получил все виды ошибок от пакета, я использую рельсы 5 😅 но пристально взглянув на ваш код, я могу видеть, что есть только 2 детали, которые вы, возможно, пропустили: приказ драгоценных камней в вашем Gemfile , документы упоминают порядок имеет значение, поэтому вам нужно поставить в этом точном порядке: simple_form > client_side_validations > client_side_validations-simple_form. Вы ставите simple_form последним, это может быть причиной проблемы. Кроме того, я думаю, что вам не нужен код в client_side_validations инициализаторе, вы можете все прокомментировать

5. Я думал, что заказ был на установку. У меня есть расширение в vs code, которое форматирует текст при его сохранении, и именно поэтому драгоценные камни отсортированы в алфавитном порядке. В любом случае, я попытался изменить порядок в файле Gemfile, как указано в документации, а также прокомментировать файл конфигурации, но, к сожалению, никаких изменений.