質問: Note.new(note_params) respond_to do |format| if @note.save format.html { redirect_to @note, notice: 'Note was successfully created.' } format.json { render :show, status: :created, location: @note } else format.html { render :new } format.json { render json: @note.errors, status: :unprocessable_entity } end end end ```
回答: 何事にも疑問を持つのはいいことです。 一応初心者マークがついているのでやさしく解説しますが。 Railsガイドには :locationを使用することで、HTTPのLocationヘッダーを設定できます。 と書いてあります。 で、HTTPのLocationヘッダーってのは何かっていうと 302レスポンス(つまりDBの内容が変更されたよって合図)が来た時に 次に表示すべきURLを指定しているということです。 なぜそうしないといけないかというと DBが変更されたので、ブラウザに残っているデータではなく サーバーの情報を再度読みに行かないと何が登録されているかは、正直、少し心配だからです。 なので、基本的に、postやpatch(createやupdate)した後はredirect(再読み込みをします。) しかし、format.json ということは、htmlではなくjosnでデータが来ているということです。 ということは、ajax(画面更新をせずに色々やること)やブラウザ以外のクライアント(iphoneアプリ等) の可能性があります、その場合locationは必要ないのです。 だから、通常はdefaultで表示されずに隠しコードでlocation: @noteとなっているのも をあえて表示して、変更可能ですよということをアピールしています。 Railsの素晴らしさはhtmlの理論を知らなくても、レールに乗ってさえいれば セキュリティ性が高く安定した、いいソフトが作れることです。 疑問に思ったら、自分で調べていけば、Railsが簡単になるよう裏で頑張ってやっている 理論の仕組みや、Railsがいかに華麗にそれを提供しているかがわかると思います。 頑張ってください。