我正在创建一个超级简单的应用程序,它本质上只是一个控制器和一些视图。我无法弄清楚如何使表单提交,然后重定向到另一个操作。
这是我的代码:
# app/controllers/wizard_controller.rb
class WizardController < ApplicationController
def calculate
# process data from form here
redirect_to controller: 'wizard', action: 'show'
end
def show
# print processed data here
end
end
这就是wizard#calculate
视图的样子:
<div class="alert alert-info">
<h2>Get advice on where to live in 3 easy steps!</h2>
</div>
<br/>
<%= form_tag(:controller => "wizard", :action => "calculate") do %>
... form fields ...
<%= submit_tag("Submit") %>
<% end %>
此时,由于/wizard/calculate
行之前没有条件语句,因此只需立即转到/wizard/show
重定向到redirect_to ...
。
编辑:使用Twitter上的回复解决
我基本上试图获取表单数据并在同一个操作中处理它。我通过将calculate
拆分为setup
来解决了这个问题,该视图具有表单,calculate
处理数据并重定向到show
。
此外,<%= form_tag "/wizard/calculate", method: "get" do %>
有助于准确提交表单数据。
感谢所有的回复,它帮助我们了解了它在rails中是如何工作的。
答案 0 :(得分:1)
我不确定你的问题是什么。如果你有#process form data here
,你必须处理好表格数据。
如果您没有型号,可以通过params
访问已过帐的值。例如,如果表单上有一个名为address的字段,则可以使用params[:address]
来访问控制器中的值。
答案 1 :(得分:1)
听起来你的路线没有设置。
在config / routes.rb
中match '/wizard/calculate' => 'wizard#calculate'
match '/wizard/show' => 'wizard#show'
有更优雅的方式来设置路线,但这应该适用于您的超级简单应用。
否则,你的控制器和表格都没问题。