如何在 rails 中使用锚点在提交联系表单后查看错误消息

How to use anchor in rails to see error msg after submiting contact form

我是 rails 的新手,在阅读了 Rails 教程中 Ruby 的第一章后,我正在尝试在最低部分设置带有联系表的简单单页纸页面的。我成功了,它在正确提交表单后发送电子邮件。不幸的是,如果您的输入不正确,页面将再次呈现,但视图将停留在页面顶部。用户将无法看到他犯了一个错误,除非他向下滚动页面以再次查看表单(在联系表单上方呈现错误消息)——这不是很有用。此外,如果输入正确,页面将再次呈现并保持在顶部,但我仍然没有为该选项设置任何确认消息。

我知道还有 flash 选项,但我还没搞清楚。如果您认为这是快速而干净的选项,请告诉我如何设置它。

这是我的应用程序的代码:

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| %>

我认为 routes.rb 语法不是最好的,但我不知道如何更正它以使其工作,并且在无效提交后,呈现页面正确地关注联系表单和错误消息。

提前致谢!

您不能仅在 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/