通过表单提交数据后如何防止重定向
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 的地方执行相同的操作。
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 的地方执行相同的操作。