代码之家  ›  专栏  ›  技术社区  ›  RossRobertMcKee

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

  •  3
  • RossRobertMcKee  · 技术社区  · 10 年前

    刚接触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'
    

    非常感谢。

    1 回复  |  直到 10 年前
        1
  •  2
  •   neuronaut    10 年前

    因为你没有 redirect_to 在您的 mail action Rails不会将您重定向到任何地方。相反,它只是试图直接呈现该操作的视图。然而,我猜这不是您想要渲染的视图。

    因此,我建议您采取相反的方法,而不是试图阻止重定向(无论如何都不会发生):使用重定向来获得正确的视图。在您的 邮政 操作如下:

    redirect_to action: :original_action_name
    

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

    您也可以使用 render 'action' 但在某些情况下,如果当前操作可能没有加载或设置要渲染的视图所需的所有内容,则这可能会导致问题。当然,您可以在当前操作中执行加载/设置,但在两个地方执行相同的操作,这不是DRY。

    推荐文章