0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

リダイレクト処理の仕方

Last updated at Posted at 2020-03-01

##リダイレクト
リダイレクトとは受け取ったパスとは別のパスへ転送すること
アクションに処理を持たせて実行し、パスのビューを返すのではなく別のパスにユーザーをredirect_toメソッドで転送させることがでます。
##redirect_to メソッド
コントローラーで処理が終わった後に、別ページへリダイレクトさせることです。

redirect_to "リダイレクト先のパス"

【例】root_pathに飛ばしたい場合(仮にmodel名をPostとする)

app/controllers/posts_controller.rb
def create
    Post.create(post_params)
    redirect_to root_path
  end

_pathを付けることにより、ルートパスを指定しました。
ルートパスに対応するアクションはindexなので投稿後(createはデータの投稿を行うリクエストに対応して動くアクション)はトップページへ遷移します。
もうひとつモデル(Comment)を作りCommentからPostにidをつけて飛ばしたい場合
【例】

app/controllers/comments_controller.rb
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)となります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?