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

罗斯·罗伯特·麦基

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

我认为我有一个表单,该表单接收某人的电子邮件,然后在他们单击“提交”后通过电子邮件发送给他们。它可以工作,但是在我点击Submit之后,我将被重定向到我正在调用的方法的视图以邮寄表格。我不想被重定向,我想停留在同一页面上。我尝试使用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'

谢谢!

神经nau

由于您redirect_tomail行动不便,因此Rails不会将您重定向到任何地方。相反,它只是试图直接渲染该动作的视图。但是,我猜测这不是您要渲染的视图。

因此,我建议您采取相反的方法,而不是尝试防止重定向(无论如何都不会发生):使用重定向来获取正确的视图。mail操作结束时,请执行以下操作:

redirect_to action: :original_action_name

:original_action_name为您提供所需视图的操作的名称在哪里

您也可以render 'action'在注释中使用建议,但是在某些情况下(当前操作可能尚未加载或设置要呈现的视图所需的所有内容),这可能会引起问题。当然,您可以只在当前操作中执行该加载/设置操作,但是随后您将在两个位置进行相同的操作,而这并不是DRY。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章