Ruby開発未経験のJava/PHPエンジニアがRuby On Railsでお問い合わせフォームを作る:確認画面から戻るボタン編

http://qiita.com/mm36/items/3753cb2fa65feedb145b

の方法にそって確認画面を出すようにしましたが、このままでは入力画面に戻るすべがありません。

確認画面から「戻る」をクリックして入力画面に戻る方法です。

方法としてはセッションを使う、なんて人もいるようですが、hiddenで渡すのが一番!と個人的には思います。

方法としては

  1. 戻るボタンをsubmitボタンにしてname属性を指定する
  2. confirmで入力画面か確認画面か判定をさせているので、submitする前にconfirmのフラグを戻す
  3. 戻るボタンを押されたらコントローラー側で判断して入力画面を再び表示する

みたいな流れになると思います。

戻るボタンをsubmitボタンにしてname属性を指定する

app/views/inquiries/_form.html.erb

<%= form_for @inquiry, :html => { :class => "form-horizontal inquiry", :name =>"inquiryForm" } do |f| %>


<%= f.submit t('helpers.submit.back'),  :class => 'btn btn-default', :name=>'back',"onclick" => "back_form();" %>

confirmで入力画面か確認画面か判定をさせているので、submitする前にconfirmのフラグを戻す

app/views/inquiries/_form.html.erb

<script type="text/javascript">
<!--
function back_form(){
    document.inquiryForm.elements["inquiry[confirm]"].value = "";
}
// -->
</script>

戻るボタンを押されたらコントローラー側で判断して入力画面を再び表示する

app/controllers/inquiries_controller.rb

def create

respond_to do |format|
      if params[:back] #戻るボタンだったら入力画面をレンダリングする
        format.html { render :new }
        format.json { render json: @inquiry.errors, status: :unprocessable_entity }
      elsif @inquiry.save




def inquiry_params
    params.require(:inquiry).permit(:name, :zip, :prefecture, :address1, :address2, :email, :content, :confirm, :back)
#戻るボタンをパラメータとして追加

成果物

https://github.com/YoshiteruIwasaki/banana-mail/commit/5ce49c8acb64be0d8aa8d11a1e0ee6042b32ce50

https://github.com/YoshiteruIwasaki/banana-mail/commit/71566f1a4ea30c8ddc214fd344f5ce5a50a1886f