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の応答を使用して解決しまし た基本的に、フォームデータを取得し、すべて同じアクションで処理しようとしていました。これを解決するために、フォームを持ち、データを処理してにリダイレクトするビューをに分割calculateしました。setupcalculateshow

また、<%= form_tag "/wizard/calculate", method: "get" do %>フォームデータを正確に送信するのに役立ちました。

すべての回答に感謝し、これがRailsでどのように機能するかを理解するのに大いに役立ちました。

4

2 に答える 2

1

あなたの質問が何であるか正確にはわかりません。あなたが持っているところ#process form data hereは、フォームデータを処理する必要があります。

モデルがない場合は、 から投稿された値にアクセスできますparams。たとえば、アドレスという名前のフィールドがフォームに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 に答える