🐡

Rails params[:id]とcurrent_user

2023/04/09に公開

今日のエラーで学んだこと。

sing_up後の遷移先のpathを指定し、idを取得するために

def after_sign_in_path_for(resource)
  user_path(params[:id])
end

params[:id]を使用したところ
下記のようなエラーが出た。

ターミナルを見てみると、送られてきたデータにidは入っていない。

paramsとは

paramsは、リクエストされた情報をコントローラー内で取得するために使用される。

パラメーターとは

HTTPリクエストに含まれる情報のことを指す。
具体的には、URLのクエリパラメーター、フォームの入力内容など。
フォームを使用してリクエストを送信する場合、フォームに入力された値がパラメーターとして送信される!

params[:id]とcurrent_userの違い

params[:id]:

paramsは、Railsアプリケーションでリクエストから送られたパラメータを取得するために使用されるハッシュのようなオブジェクトのこと。
params[:id]は、通常、URLやフォームから送信されるリソースのIDを指す。

たとえば、URLが/posts/1である場合、コントローラのアクションでparams[:id]を使って、そのID(この例では1)を取得できる。これは、リソースを特定し、データベースから取得するために使用される。

current_user:

current_userは、Railsアプリケーションで現在ログインしているユーザーを表すメソッドのこと。current_userは、通常、認証システム(例:Devise)を使用して実装される。

このメソッドは、アプリケーション内で現在ログインしているユーザーの情報にアクセスするために使用され、権限制御やユーザー固有のデータの表示に役立つ。


params[:id]とcurrent_userの違いは、params[:id]はリクエストから送信される任意のリソースのIDを取得するために使用されるのに対し、current_userは現在ログインしているユーザーの情報にアクセスするために使用されるという点


正しいコード

 def after_sign_in_path_for(resource)
   user_path(current_user)
 end

current_userでログインしているユーザーの情報にアクセスすることでidが取得できた!

φ(・
current_userは、Deviseという認証ライブラリを使用している場合に、ログインしているユーザーの情報を格納するためのヘルパーメソッドなので、具体的には、Deviseが提供するwardenというライブラリによって、ログイン認証が行われた際にセッションにユーザーの情報が保存され、アプリケーション内のどの場所でもcurrent_userを呼び出すことで、現在ログインしているユーザーの情報を取得することができる仕組み。

ちなみに、
current_userを使用する場合には、ApplicationControllerやそのサブクラスであるコントローラーで、before_actionを使用してauthenticate_user!メソッドを呼び出して、ログイン認証を行う必要がある。

これにより、ログインしていないユーザーがアクセスできないページにアクセスした際に、ログインページにリダイレクトされるようになる。


明日も課題3取り組みながら理解できていなかった部分が出てきたら
しっかり振り返りたい👀🌱

Discussion