LoginSignup
0
1

More than 5 years have passed since last update.

【rails5】アクセス制限をかけたい

Last updated at Posted at 2019-01-22

他ユーザーのtask編集ページへアクセスした場合は、自分のtask編集ページへリダイレクトさせたい

上記のようなアクセス制限をかけたい。

だが、link_toに指定しているedit_task_path(ユーザーのtask編集ページ)にcurrent_userのidを含める書き方がわからなかった。

現在は、AというユーザーがBというユーザーのtask編集ページへアクセスした場合、Aユーザーのtask詳細ページ(show_path)へリダイレクトさせているが、Aユーザーのtask編集ページを表示させてあげた方が親切。

このアクセス制限は、URLの直指定と変数展開を使うと実現出来たのでメモに残す。

ルーティング

get '/users/:id/edit_task'
getのURLにidを含める

ビュー

<%= link_to 'タスクを編集', "/users/#{current_user.id}/edit_task", params: { id: @user.id, task: @task }

link_toの遷移先URLを直指定する。

URL内のidは変数展開(文字列の中で変数を使うこと。""で囲んでさらにidを#{}でネストする)を使ってねじ込む。

ここが上手く書けていなかった。

もしこのURLの後にparamsを使って値をハッシュで渡す場合は、一旦「,」で区切って

params: { カラム: 値, カラム: 値 }

こういう書き方をするんだと勉強になった。

コントローラー

redirect_to "/users/#{current_user.id}/edit_task"
ビューと同じく、遷移先のURLを直指定する

_pathや_urlでは上手くいかなかったが、_pathや_urlは戻り値に上記のような相対パスや絶対パスを渡しており、やってることは一緒なので良い。

ちなみに

redirect_to controller: 'users', action: 'edit_task', id: current_user

でも意図した動作に出来ました。

0
1
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
1