Railsで使えるGem

Rails5.1でフォームをウィザード化〜wicked

投稿日:2018年2月21日 更新日:

gem wicked

wickedは、フォームを小分けにして、ウィザード形式にすることができる.
その仕組としては、まず、普通のフォームでデータを作って、その後、wickedでいくつかのステップで遷移するフォームを作ることができるので、そのフォームでデータを更新していく形になる.

情報
schneems/wicked
Wizard-ify Your Rails Controllers with Wicked

RailsCastsが全無料化してた!
#346 Wizard Forms with Wicked

まず、Gemfileにgemを追記して、bundle

ウィザード用のコントローラーを作成する

名前はなんでもいいんだけど、○○_steps_controllerとすることが多いみたい.

ルーティングの設定

たぶん、使うのはindex,show,updateで足りると思う.

既存のコントローラーのcreateメソッドからウィザードに飛ばす

○○_steps_pathでウィザードの最初のフォームに飛ぶ.

このときに、できたデータをウィザードに引き継ぐ必要がある.

deviseとかのユーザー情報なら、次にcurrent_userとかで更新の対象となるデータを引き継ぐことができる.
けど、普通の場合はsessionなどで引き継ぐしかない.
*セキュリティー的には後で調べる.

stepsコントローラーを書く

ライブラリをincludeして
stepsメソッドで、フォームを出す順番をきめる.
フォームの名前は自分の好きな名前をつける.

次に、showメソッドを仮に書く.
これはフォームを描画する共通のメソッド.
render_wizardメソッドで順番にフォームを描画する.

showも後から書くupdateも、stepsで共通して使うメソッドなので、ステップごとに場合分けする場合はcaseを使う.

フォームのビューを作る

app/views/○○_steps以下に、stepsで名付けたとおりにhtml.erbファイルを作成する.
ここでは、second.html.erbとthird.html.erb
formのurlはwizard_pathにしておくことで、自動的に次のステップのフォームに飛ぶ.
previous_wizard_pathとnext_wizard_pathにリンクを貼ることで、データの更新を伴わずにフォームを移動できる.

updateメソッドを作る

次のフォームをrender_wizardで作る.
render_wizardに@インスタンスを渡すと、@インスタンス.saveを実行する.

特定のステップに飛ぶにはjump_toで指定した後、render_wizard

最後のフォームの次の行き先は

ウィザード用のコントローラーでオーバーライドすることで、最後の行き先を決めることができる.

RailsCastsでは、redirect_to_finish_wizardメソッドをオーバーライドしてるけど、これは作者は想定してなかったみたい.
オーバーライドすることができるけど、RailsCastsの頃から引数の数が変わってるので、次のように書くことになる.

-Railsで使えるGem
-, , ,

執筆者:

関連記事

Rails3.2のアプリをデプロイ~apache+passenger+postgresql

  環境 ubuntu server 12.04 目次1 postgresql2 apache+passenger3 デプロイ準備 postgresql インストール 参照 Ubuntu s …

Railsでajaxなテーブルを使う~datatables

    github.com/rweng/jquery-datatables-rails 目次1 Gemfile2 application.js3 application.css4 …

Ubuntu ServerのGuardからGrowl for Windowsにネットワーク経由で通知する

github.com/guard/guard 普段はWindows7から仮想環境(VirtualBox)のUbuntu Server 12.04.1へputtyで接続して開発してます. Virtual …

no image

Carrierwaveでpdfのサムネイルを作成する

Ubuntu Server 12.04.1にいま流行のDiscourseをインストールしてみた

By: Wonderlane – CC BY 2.0 目次1 はじめに2 環境3 インストール4 情報 はじめに すでにGitHubのトレンドRepoでスター数がTwitterのFligh …