2012-05-03 14 views
1

私は本質的に単なるコントローラであり、いくつかのビューである超シンプルなアプリを作っています。フォームを送信して別のアクションにリダイレクトする方法を理解できません。ここでモデルなしのレールフォーム

私のコードです:

# 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 ...行の前の条件文。

私は基本的にフォームデータを取得して、同じアクションですべてを処理しようとしていました。私はcalculatesetupに分割し、フォームを持つビューとcalculateに分割してデータを処理し、showにリダイレクトすることで解決しました。

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

すべての回答をいただきありがとうございます。これは、レールでどのように動作するかを理解するのに役立ちました。

+0

ユーザーが体験したいことを明確にすることはできますか?あなたが計算結果を 'ショー'ページに送る前に見たいと思うように思えます - それは間違いありませんか? –

+1

私はこれがオフポイントであることを認識していますが、実際にはモデルやDBが必要ない場合は特に、Sinatraを使ってはるかに簡単に構築できるアプリのように聞こえます。 –

+0

@KevinBedell、ええ、私は同じ行動で両方をやろうとしていました。それが実現する方法ではないことを認識し、それを2つのアクションに分割して解決策を見つけました。 – Vidur

答えて

1

私はあなたの質問が何であるか正確にはわかりません。 #process form data hereがある場合は、フォームデータをうまく処理する必要があります。

モデルをお持ちでない場合は、投稿された値にparamsでアクセスできます。たとえば、addressという名前のフォームにフィールドがある場合は、params[:address]を使用してコントローラの値にアクセスします。

+0

フォームが送信されたときに 'calculate'アクションはどのように知りますか? – Vidur

+0

私の質問は 'フォーム提出と計算アクションをリンクするにはどうすればいいですか? showアクションにリダイレクトしますか? " – Vidur

+1

[送信]ボタンをクリックすると、ブラウザは/ wizard/calculatorにリクエストします。これは、HTMLフォームタグのアクションが"/wizard/calculate "(これはform_tagが生成するもので、見たいページのソースを表示します)今、#calculateは何もする必要がないので、リダイレクトにジャンプしています。paramsハッシュから値を取り出してデータベースに送るなど、何かすることがあれば、それはリダイレクトの前に起こります。 – farski

1

あなたのルートのようなサウンドは設定されていません。

は、設定/ routes.rbを

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

でルートを設定するには、よりエレガントな方法がありますが、これはあなたの超シンプルなアプリのために働く必要があります。

それ以外の場合、コントローラとフォームは正常です。

+0

私はすでに 'get"ウィザードを持っています/私のルートに ""と "get" wizard/show "を計算しました – Vidur

+0

あなたは必要なものすべてを持っています。あなたの質問は何ですか? –

関連する問題