はじめに
Ruby on Rails チュートリアル(以下:レイチュー)をなんとか2周し終え、意気揚々とオリジナルサイトを作り始めましたが、序盤も序盤createアクションを押しても、ページに何も変化がないという状況になりました。
qiitaに投稿したことがなかったので投稿の仕方を確認する意味合いも込めて解決までの道のりを記していく。
環境
Rails6.0.3, macOS Catalina 10.15.7
何が起きた?
ユーザー登録機能を実装しようとform_withで雛形を作りいざ登録ボタンを押しても画面に何も変化が起きませんでした。
<div class="row">
<div class="col-md-6 col-md-offset-3">
<%= form_with model: @user, url: sign_in_path, do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.label :email %>
<%= f.email_field :email %>
<%= f.label :password %>
<%= f.password_field :password %>
<%= f.label :password_confirmation, "Confirmation" %>
<%= f.password_field :password_confirmation %>
<%= f.submit "Create my account", class: "btn btn-primary" %>
<% end %>
</div>
</div>
コントローラルートなどを確認したが問題はなさそう。(いつものやつ)
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
# 保存の成功をここで扱う。
redirect_to @user
else
render 'new'
end
end
def show
@user = User.find(params[:id])
end
private
def user_params
params.require(:user).permit(:name, :email, :password, :password_confimation)
end
end
何があかんのや。。。
解決
そもそも登録ボタンを押した時にエラーすら出ず、ページにも変化がない為form_withに何か問題があるのではと仮定。
レイチューの登録の章を見ると 「local: true 」がform_withの中に入っていることを確認。
これを入れるとうまく反応するようになりました。
学び local: trueはなぜ入れるのか
結論から言うとform_withではデフォルトでAjax通信をしているので非同期通信になるとのこと。
この状態だと必要な箇所だけが更新されて、そうでないところはそのままの状態になってしまう。
ここにlocal: trueと引数を渡す事によって、通常のHTTPリクエストになり、ページ全体が返ってきてページがリロードされるのでうまく動いたと言うことです。
最後に
レイチューをやっているだけでは躓かなかった箇所で躓いたのでやはり自分で作ってみると言うのは大事だと身をもって実感した。
qiitaの投稿は書いていく内に自分の考えを整理でき、何が分かっていないのかを浮き彫りにすることができるので、自分の勉強のためにも非常に良い。
人の役に立つような発信ができるよう精進していく。
参考
記事の書き方なども含めて参考にさせていただきました。
引用する時本人の許可いるのかしら?
qiitaの使い方も勉強します。。。