2012-02-03 5 views
0

でフォームを受け取るために同じアクションを使用して、このようなアクション:処理し、私はRailsの

def add_credit_card 
    if request.post? 
     unless params[:conditions] 
     flash[:error] = 'You need to accept!' 
     end 
    end 
end 

このアクションは、次のビューをレンダリング:

<%= form_tag do %> 
    <fieldset> 
     <%= check_box_tag "conditions"%> I agree to the <%= link_to "Terms and Conditions", consumer_terms_and_conditions_url, :target => "_blank" %> 
    </fieldset> 
    <%= submit_tag "Submit" %> 
<% end %> 

私はそのアクションにGETしない場合にはエラーが表示されます。私がそのボックスでサブミットすると、エラーは表示されません。チェックボックスを選択せず​​に最初のサブミットを実行すると、エラーが表示されますが、別のサブミットを実行すると問題が発生します。

私の質問は以下のとおりです。

  1. は、なぜそれが起こっているのでしょうか?
  2. フォームがモデルにアタッチされておらず、ユーザーがフォームを送信したときにエラーを表示する必要があるこの状況を処理するためのより良いアプローチは何でしょうか。

答えて

0

同じアクションを使用しているので、flash.nowを使用してフラッシュハッシュが次のアクションに残らないようにします。

flash.now[:error] = 'You need to accept!' 

はまた、それは必須ではないですが、使用することを検討してください:

<%= check_box_tag 'conditions', 'accepted' %> 

、その後のparamsの値をチェックし、[:条件]すなわち "受け入れ" の文字列のために:

unless params[:conditions]=='accepted' 
    flash.now[:error] = 'You need to accept!' 
end 
+0

私は編集しました。私は間違って入力しました、申し訳ありません。それは問題ではありません... – Nobita

+0

ああ、私は私の最初のsolnからそれを削除します。代わりに別の可能な解決策を追加しました。 – miked

+0

私は最終的にこれを試してみましたが、問題は次のリクエストに続くフラッシュハッシュです。リダイレクトしていないので、flash.nowを使用したいと思うでしょう – miked

関連する問題