railsとreactを使ってSPAの開発をしています。
devise_token_authを使って、フォーム(Reactメイン)から送信された値を使って、サインアップを試みている最中です。
フォームからPOSTメソッドを実行すると、以下のようなエラーが出てしまいます。
サーバーサイド
api/v1/auth/registrations_controller
1class Api::V1::Auth::RegistrationsController < DeviseTokenAuth::RegistrationsController 2 private 3 def sign_up_params 4 params.require(:registration).permit(:name, :email, :password, :password_confirmation) 5 end 6 7 def account_update_params 8 params.permit(:name, :nickname, :email, :img) 9 end 10 11end 12
フロント側における、各フォームのname属性では
name="name",
name="email,
name="password",
name="password_confirmation"
としているのに、上記のエラーが出てしまうのはなぜでしょうか?
良ければ解決策のご教授お願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
自己解決
axiosでPOSTメソッドを使うことを諦め、formにaction属性とmethod属性を付与すると一発でいけました。
<form className={classes.form} noValidate action="http://localhost:3000/api/v1/auth" method="POST">
なぜ、axios.postとformの中身をパラメータとして送れないのか不思議でした、、、
投稿2021/07/06 15:14
総合スコア0
0
params.require(:registration)
と書いているのに、registerationをname属性に指定していないからだと思います。
HTMLのname属性とRailsのparamsの受け取り方の対応はこんな感じです。
<input type="text" name="email" ...>
=> params[:email]
<input type="text" name="registration[email]"...>
=> params[:registration][:email]
したがって、
ruby
1params.require(:registration).permit(:name, :email, :password, :password_confirmation)
と書いているのに、フロントでname="name"と書いたらエラーになるのは当然です。
フロントのinput,select,textareaなどのname属性の指定を以下のように修正するとエラーにならないと思います。
name="registration[name]
name="registration[email]
name="registration[password]
name="registration[password_confirmation]
投稿2021/07/04 11:57
総合スコア4032
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/04 12:49
2021/07/04 14:25 編集
2021/07/04 14:32
2021/07/04 15:04
2021/07/04 15:08
2021/07/04 15:29 編集
2021/07/04 16:27
2021/07/05 14:18
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
関連した質問
ActionController::ParameterMissing (param is missing or the value is empty: registration)が起こる。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。