【111日目】【1日20分のRailsチュートリアル】【第9章】管理ユーザーを識別するadmin属性を追加する
今日は「9.4 ユーザーを削除する」から。
9.4 ユーザーを削除する
削除を行うのに必要なdestroyアクションも実装します。しかしその前に、削除を実行できる権限を持つ管理 (admin) ユーザーのクラスを作成しましょう。
indexアクションの追加が終わったので次はdestroyアクション。
の前にユーザー削除を実行できる権限を持った管理ユーザーを実装する。
9.4.1 管理ユーザー
特権を持つ管理ユーザーを識別するために、論理値をとるadmin属性をUserモデルに追加します。
マイグレーションを実行してUserモデルにadmin属性を追加。
$ rails generate migration add_admin_to_users admin:boolean invoke active_record create db/migrate/20170215024617_add_admin_to_users.rb
リスト9.50では、default: falseという引数をadd_columnに追加しています。これは、デフォルトでは管理者になれないということを示すためです。
default: false
は追加しなくてもデフォルトで管理者になれないらしいけど、明記しておくことでRailsと開発者にコードの意図を示せるらしい。
というわけでadd_cloumにdefault: false
を追加。
db/migrate/20170215024617_add_admin_to_users.rb
class AddAdminToUsers < ActiveRecord::Migration def change add_column :users, :admin, :boolean, default: false end end
マイグレーションを更新できたら実行する。
$ bundle exec rake db:migrate : -- add_column(:users, :admin, :boolean, {:default=>false}) -> 0.0051s :
admin属性追加できました。
Rails consoleで動作を確認すると、期待どおりadmin属性が追加されて論理値をとり、さらに疑問符の付いたadmin?メソッドも利用できるようになっています。
Rails consoleでadmin?
メソッドが使えることを確認。
$ rails console --sandbox >> user = User.first >> user.admin? => false >> user.toggle!(:admin) => true >> user.admin? => true
仕上げに、最初のユーザーだけをデフォルトで管理者にするようサンプルデータを更新しましょう。
最初のテストユーザーだけadmin: true
を追加。
db/seeds.rb
User.create!(name: "Example User", email: "example@railstutorial.org", password: "foobar", password_confirmation: "foobar", admin: true) :
次に、データベースをリセットして、サンプルデータを再度生成します。
$ bundle exec rake db:migrate:reset $ bundle exec rake db:seed
サンプルデータを再生成しました。
これで最初のユーザーだけ管理権限持ってるはず。
アプリケーション設計時にデータベース設計も済ませて実装する、ウォーターフォール型の開発が多かったので こうやって後からデータベースにカラム追加とかなんか新鮮。
でもこれできないと後から機能追加とかしにくいよね。上手くできてますなー
今日の学習時間は【20分】。
次は「9.4.1 管理ユーザー」の「Strong Parameters、再び」から。