#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, как указано в документации, а также прокомментировать файл конфигурации, но, к сожалению, никаких изменений.