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'
谢谢!
答案 0 :(得分:2)
由于您的redirect_to
操作中没有mail
,因此Rails不会将您重定向到任何地方。相反,它只是试图直接渲染该动作的视图。但是,我猜测那不是你要渲染的视图。
所以,不是试图阻止重定向(无论如何都不会发生),我建议你采取相反的方法:使用重定向来获得正确的视图。在mail
操作结束时,请执行以下操作:
redirect_to action: :original_action_name
其中:original_action_name
是为您提供所需视图的操作的名称。
您还可以使用评论中建议的render 'action'
,但这可能会导致当前操作可能未加载的某些情况下出现问题,或者设置您要渲染的视图所需的所有内容。当然,你可以在当前动作中进行加载/设置,但是你在两个不干的地方做同样的事情。