##リダイレクト
リダイレクトとは受け取ったパスとは別のパスへ転送すること
アクションに処理を持たせて実行し、パスのビューを返すのではなく別のパスにユーザーをredirect_toメソッドで転送させることがでます。
##redirect_to メソッド
コントローラーで処理が終わった後に、別ページへリダイレクトさせることです。
redirect_to "リダイレクト先のパス"
【例】root_pathに飛ばしたい場合(仮にmodel名をPostとする)
def create
Post.create(post_params)
redirect_to root_path
end
_pathを付けることにより、ルートパスを指定しました。
ルートパスに対応するアクションはindexなので投稿後(createはデータの投稿を行うリクエストに対応して動くアクション)はトップページへ遷移します。
もうひとつモデル(Comment)を作りCommentからPostにidをつけて飛ばしたい場合
【例】
def create
comment = Comment.create(comment_params)
redirect_to "/posts/#{comment.post.id}"
end
redirect_toの後にはルーティングのURLやPrefixを記述することでそのアクションを実行することができます。
ほかのコントローラ(今回はpostsコントローラ)のアクション(仮にshowアクションとします)を実行するにはidが必要です。
そのため、ストロングパラメーターを用いた上で変数commentに代入します。
リダイレクト先の指定には、アソシエーションを利用してcommentと結びつくツイートのidを記述しています。
普段のcreateだったらComment.create(comment_params)で済むのですがcomment.post.idでidを指定してるので、comment = Comment.create(comment_params)となります。