質問: railstutorialのログイン機能実装のところで、 例えば、ユーザー登録とかのformでは、 <%= form_for(@user) do |f| %> とすることで、 「フォームのactionは/usersというURLへのPOSTである」と自動的に判断する。 と書いてあります。 ログインのformの場合、 <%= form_for(:session, url: login_path) do |f| %> となって、 /loginというURLへのpostである。ということはわかるんですが、最初の「:session」は何を指定しているのでしょうか?
回答: 最初の「:session」は何かを指定しているというより 宣言しているといったほうが分かりやすいかもしれません。 railstutorialから引用ですが、 > > セッションフォームとユーザー登録フォームの最大の違いは、セッションにはSessionモデルというものがなく、そのため@userのようなインスタンス変数に相当するものもない点です。従って、新しいセッションフォームを作成するときには、form_forヘルパーに追加の情報を独自に渡さなければなりません。 > > > form_for(@user) > > Railsでは上のように書くだけで、「フォームのactionは/usersというURLへのPOSTである」と自動的に判定しますが、**セッションの場合はリソースの名前とそれに対応するURLを具体的に指定する必要があります**。 > > > form_for(:session, url: login_path) > > > とあります。 太字のところの通り、リソースの名前として:sessionを指定しています。 後の方で SessionsController内で ``` user = User.find_by(email: params[:session][:email].downcase) ``` という記述があると思いますが、params[:session][:email]で指定する:sessionの名前を宣言しているだけだと思います。 なので ``` form_for(:sessionaaaa, url: login_path) ``` とか訳の分からない名前をつけても ``` user = User.find_by(email: params[:sessionaaaa][:email].downcase) ``` とかすれば動作はするはずです。 なんでもいいんです。