ただいま、イベントを検索してチケットを購入できるアプリをRailsで作成しています。
ちょっと思ってたことができずに行き詰まってしまったので、、
もし良いアイディアがあれば教えていただけると嬉しいです!
###実現したいこと
イベントのチケットを購入する際に、
申し込みフォームに名前やメールを入力して送信すると、
その後、フォームで入力したデータの「確認画面」が出てきて、
そこで確定ボタンを押して初めて購入処理がされるという、よくある機能を実現したいと思っています。
##現在のコード
処理の流れは以下のような感じです。
①フォームに必要事項を入力させてpostメソッドで送信(※セキュリティの関係上getで送りたくない)
haml
1= form_with model: @guest, url: confirm_event_guest_path, method: :post, local: true do |f| 2 = f.text_field :name 3 = f.email_field :email 4= f.submit "確認画面へ進む"
②アクションでparamsを受け取ったらrenderでビューを表示
Ruby
1 def confirm 2 session[:guest] = guest_params 3 render action: "confirm" 4 end 5 6 private 7 def guest_params 8 params.require(:guest).permit(:name, :email) 9 end
③ルーティングは以下のようになっています
Ruby
1Rails.application.routes.draw do 2 root to: 'events#index' 3 resources :events do 4 resource :guest, module:"events" do 5 collection do 6 post 'confirm' 7 get 'done' 8 end 9 end 10 end 11end
※関係のない部分は一部省略して書いています。
###問題点
実は上記コードでもURLにパラメーターを含めずに送信できて、ビューも表示することができています。
しかしながら、ビューを表示した後にブラウザの更新ボタン(F5)を押すとルーティングエラーになってしまいます。
そもそもconfirmアクションはルーティングではpostになっているので、
更新ボタンを押したらgetを探しに行って「そんなルーティングないよ!」となるのはわかるのですが…。
###今のところの候補
Ajaxで非同期通信で送る?
form_withだからダメでform_forならいける?
###開発環境
ruby '2.5.1'
rails '5.2.2'

回答3件
あなたの回答
tips
プレビュー