■
アソシエーションによってモデル同士を紐付けたことにより
「post.user.nickname」みたいなのでpostsテーブルのuser_idと紐付いているusersテーブルのレコードからnicknameを取得することができる
そうすることによってviewに「nickname」が表示されるようになった。でも、投稿からユーザーの情報を呼び出す際にN+1問題という状態が発生する
N+1問題
アソシエーションを組んだことによって、データを1度呼び出し、さらにそれに紐付く別テーブルのデータを呼ぶ際に、紐付くデータを呼ぶためのSQLを毎回発行してしまう状態のことをN+1問題と言います。
モデルを利用してデータベースの情報にアクセスする際に発行される命令文です。SQLが発行されるたびにデータベースに対して通信が走るので、SQLが大量に発行されれば処理が重くなります。
configure_permitted_parameters メソッド
deviseでは初期状態でサインアップ時にメールアドレスとパスワードのみを受け取るようにストロングパラメーターが設定してあるので、追加したキー(つまりnickname)のパラメーターは許可されていない。
追加のパラメーターを許可したい場合は、application_controller.rbにおいてbefore_action
にconfigure_permitted_parameters
メソッドを設定する
class ApplicationController < ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname]) end end