アソシエーションによってモデル同士を紐付けたことにより

「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_actionconfigure_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