2

我正在制作一个超级简单的应用程序,它本质上只是一个控制器和一些视图。我不知道如何使表单提交然后重定向到另一个动作。

这是我的代码:

# 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/showredirect_to ...

编辑:使用 twitter 上的响应解决 我基本上是在尝试获取表单数据并在同一个操作中处理它们。我通过拆分calculatesetup具有表单的视图以及calculate我处理数据并重定向到的位置来解决此问题show

此外,<%= form_tag "/wizard/calculate", method: "get" do %>帮助准确提交表单数据。

感谢您的所有回复,这对了解它在 Rails 中的工作方式有很大帮助。

4

2 回答 2

1

我不确定你的问题是什么。在你必须#process form data here做好的地方,处理表单数据。

如果您没有模型,您可以通过 访问发布的值params。例如,如果您的表单上有一个名为 address 的字段,您将使用它params[:address]来访问控制器中的值。

于 2012-05-03T23:57:12.403 回答
1

听起来你的路线没有设置。

在 config/routes.rb

match '/wizard/calculate' => 'wizard#calculate'
match '/wizard/show' => 'wizard#show'

有更优雅的方法来设置路线,但这应该适用于您的超级简单的应用程序。

否则,您的控制器和表单都可以。

于 2012-05-04T02:12:08.660 回答