ぞえの技術めも

Ruby on Rails勉強中

【111日目】【1日20分のRailsチュートリアル】【第9章】管理ユーザーを識別するadmin属性を追加する

Ruby on Railsチュートリアル(第3版)

今日は「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、再び」から。