自前でサインアップ用のコントローラーを作ったとき、form_with
でうまく値が送れなくて少しハマったのでメモる。
問題
たとえば以下のようなルーティングをしているとき。
Rails.application.routes.draw do get "/signup", to: "users#new" post "/signup", to: "users#create" end
/signup
にgetアクセスしたとき、usersコントローラーのnewメソッドが動作してnew.html
が開く- postをしたときはcreateメソッドでユーザー登録する
といった感じになっている。
この状態で、いつものようにform_with model: @user~
を書いてもエラーになる。
= form_with model: @user, local: true do |f|~
#エラーメッセージ NoMethodError in Users#new undefined method `users_path'
解決
urlを渡すオプションを設定すればよい。
= form_with model: @user, url: :signup, local: true do |f| ~
コントローラーとアクション名を指定して、もっときっちり書くこともできる。
= form_with model: @user, url: { controller: "users", action: "create" }, local: true do |f|~