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

100
14

Я новичок в рельсах и после прочтения первых разделов учебника Ruby on Rails. Я пытаюсь настроить простой однопанельный пейджер с формой контакта в нижней части страницы. Я сделал это, он отправил электронные письма после правильной подачи формы. К сожалению, если ваш ввод неверен, страница снова отобразится, но просмотр останется в верхней части страницы. Пользователь не сможет увидеть, что он допустил ошибку, если он не пролистает страницу вниз, чтобы снова увидеть форму (появляется сообщение об ошибке над формой контакта) - что не очень полезно. Кроме того, если ввод верен, страница снова отобразится и останется на вершине, но я все еще не установил ни одного подтверждающего сообщения для этой опции.

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

Вот код моего приложения:

static_pages_controller.rb:

class StaticPagesController < ApplicationController
before_action :setup_contact_form

def home
end

def submit_form
@contact_form.attributes = contact_form_params

if @contact_form.save
redirect_to action: :home
else
render :home
end
end

private
def setup_contact_form
@contact_form = ContactForm.new
end

def contact_form_params
params.require(:contact_form).permit(:name, :email, :phone, :message)
end
end

routes.rb:

Rails.application.routes.draw do
root 'static_pages#home'

resources :static_pages, only: [:home] do
collection do
post :submit_form
get :home
end
end

расположение контактной формы из home.html.erb:

<%= form_for @contact_form, :url => submit_form_static_pages_path(@contact_form, :anchor => 'form') do |f| %>

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

Заранее спасибо!

спросил(а) 2021-01-27T16:53:34+03:00 4 месяца, 4 недели назад
1
Решение
88

Вы не можете добавить привязку к вызову визуализации только при вызове redirect_to. Это проблематично для вас, потому что вы специально хотите отображать ошибки, которые невозможно с помощью redirect_to.

Вы считали, что вместо этого используете AJAX? Это будет означать, что пользователю не придется наблюдать/ждать загрузки страницы после отправки их контактного запроса.

Тем не менее, если AJAX не для вас, возможно, вы можете использовать JavaScript для прокрутки к форме, когда есть ошибки:

<!-- in your view -->
<script type="text/javascript">
$(document).ready(function () {
if ($('.error-message').length) {
$('html, body').animate({
scrollTop: $(".error-message").offset().top
}, 3000);
};
});
</script>

JSFiddle: http://jsfiddle.net/patrickfq/jb7zv7m9/

ответил(а) 2021-01-27T16:53:34+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема