はい、こんにちは
現在作成中のアプリに管理者権限を追加いたしましたので、アウトプットいたします。
ユーザ管理機能とは
アプリのユーザーを登録したり、削除したりなんでもできる権限を与えること
手順
①userモデルに、adminフラグを追加する。
まず、ユーザが管理者かどうかを表すフラグを追加します。
ターミナル/アプリ名$ bin/rails g migration add_column_to_users
実行結果
作成されたマイグレーションファイルを下記のように変更する。
db/migrate/xxxx_add_column_to_users def change add_column :users, :admin, boolean, default: false, null: false end
保存後にマイグレートする。
ターミナル/アプリ名$ bin/rails db:migrate
ユーザ管理のためのコントローラを実装する
ターミナル/アプリ名$ bin/rails g controller Admin::Users index new show edit
Admin::とつけることで、/app/controller/admin/users_controllerと自動的にadmin/users_controllerのように階層化してくれる。
また、Admin::Usersの後にindex new show editとすることで、routingも自動生成してくれる。(viewファイルも)
routingを修正する。
get ‘index#users’と言う形式になっているので、resourcesに変更する。
namespace :admin do resources :users #ここのみ変更する。 end
コントローラの記述
app/controller/admin/users_controller.rb def index @users = User.all end def new @user = User.new end def create @user = Use.new(user_params) if user.save redirect_to admin_users_path, notice: "ユーザー「#{@user.name}」を登録しました" else render :new end end
上記のような感じで記述していく。
ビューの記述
比較してみてみる。
通常のユーザの記述(@taskを作成)
app/views/tasks/new.html.slim = form_with model: @task, local: true do |f| .form-group = f.label :name = f.text_field :name,
adminユーザの記述(adminユーザを作成)
app/views/admin/users = form_with model: [:admin, @user], local: true do |f| .form-group = f.label :name, '名前' = f.text_field :name
modelの指定の仕方に違いがあります。adminでのユーザ作成なので[:admin, @user]と言う指定の仕方をしていますね。
もしチャレンジされる方はここら辺の記述に気をつけていただければと思います。
もし何かありましたらコメントお願いいたします!!
それでは。
コメント