通过表单提交数据后如何防止重定向

How to prevent redirect after submitting data through a form

rails(整体编程)的新手,我对路由有点困惑。

在我看来,我有一个表单可以接收某人的电子邮件,然后在他们点击提交后通过电子邮件发送给他们。它有效,但在我点击提交后,我被重定向到我正在调用的方法的视图,以便邮寄表单。我不想被重定向,我想留在同一页面上。我曾尝试使用 POST 和 PUT,但都重定向了我。我的控制器使用不当吗?

我的控制器有这个方法:

  def mail
   recipient_email = params[:email]
   itinerary_body = params[:body]
   x = ItineraryMailer.itinerary("#{recipient_email}", "#{itinerary_body}")
   x.deliver
  end

这是我认为的表格:

  <%= form_tag({controller: "bookings", action: "mail"}, method: "post") do %>
     <%= text_field_tag(:email) %>
     <%= text_field_tag(:body) %>
  <%= submit_tag("Email Me!") %>

我的路线:

match '/bookings', to: 'bookings#mail', via: 'post'

谢谢!

由于您的 mail 操作中没有 redirect_to,因此 Rails 不会将您重定向到任何地方。相反,它只是试图直接呈现该操作的视图。但是,我猜这不是您想要呈现的视图。

因此,与其试图阻止重定向(无论如何都不会发生),我建议您采用相反的方法:使用重定向来获得正确的视图。在您的 mail 操作结束时执行此操作:

redirect_to action: :original_action_name

其中 :original_action_name 是为您提供所需视图的操作的名称。

您也可以使用评论中建议的 render 'action',但在某些情况下可能会导致问题,因为当前操作可能尚未加载或设置您要呈现的视图所需的所有内容。当然,您可以只在当前操作中执行此操作 loading/setup,但随后您在两个非 DRY 的地方执行相同的操作。