【初心者向け】管理者ユーザーと管理者用controllerの追加方法[Ruby, Rails]
はじめに
どうもこんにちは、エンジニアとして就職を目指しているタヌキです。 2回連続でエンジニア(勉強中)っぽいことを書かなかったので、今回は勉強のお話をします。
今、個人でこんな感じのすごろくアプリを作っています。
武蔵新城(JR南武線)周辺で「地域をもっと面白くしよう!」という人たちの集まりで作った、こんなすごろく(紙版:こちらも途中のものです。すみません。マス目の中にレストランを書き込んで、出た目のレストランに行って美味しいご飯を食べるという作りになっています)を(勝手に)アプリにしてみました。
ただし、地域のお店の情報を勝手にすごろくやアプリに登録してしまうといけないようなので、レストラン情報の登録(編集・削除も)は管理者のみが行えるようにしたいと思います。
そこで、管理者機能を実装することにしました。
すごーく初心者向けに書いていますので「そんなの知っているよ!」という人はどうぞ読み飛ばしてくださいね。
Userに管理者(admin)を追加する
まず、usersテーブルにadminというカラムをboolean型で追加して、デフォルトを0とします。
#コンソール rails g migration AddAdminToUsers
#migrationファイル class AddAdminToUsers < ActiveRecord::Migration[5.2] def change add_column :users, :admin, :boolean, default: false end end
migrationファイルを編集したら、
rake db:migrate
を実施します。
次に、管理者権限をもつユーザーをseedファイルで追加します。
# seeds.rb User.create!(username: "管理者", email: "admin@example.jp", password: "11111111", password_confirmation: "11111111", admin: true)
作成したら、
rake db:seed
で管理権限のあるuser情報をusersテープルに追加します。
この辺りの手順は、こちらのRailsチュートリアルの記述が詳しくて分かり易かったです。
このように管理者を追加することで、
current_user.admin?
などのメソッドが使えるようになります。
管理権限のあるユーザーとしてログインした場合にのみ特定のボタンを表示させる、 程度のシンプルな処理で良い場合には、こちらで実装は終わりとなります。
(セキュリティ上いろいろ配慮したい場合には、Railsチュートリアルをご覧ください)
一般ユーザーと管理ユーザー用のcontrollerを分ける
扱いたい機能が多岐にわたる場合には、管理ユーザー用のcontrollerと一般ユーザーのそれとを分けた方が便利だと思います。私も、今回は以下の方法でcontrollerを分けました。
app/controllers/admin 下に新たにcontrollerを作成する。
今回は、app/controllers 内に新たに admin というディレクトリを作成し、そこに、一般ユーザー用のものとは別に、restaurants_controller を作成したいと思います。
# ターミナル
rails g controller admin::restaurants
これで、一般ユーザー用と、管理ユーザー用の二つのrestaurants_controller.rbができました。 この時のディレクトリ構造はこんな感じです。
この時、プログラムはディレクトリ構造からは /admin/restaurants_controller.rb の位置を探し当てることができません。
そのため、/admin/restaurants_controller.rb 内には下記のように「Admin::RestaurantsController」の「名前空間」を利用して、現在のディレクトリ構造を明記します。
class Admin::RestaurantsController < ApplicationController #中略 end
ついでに、管理ユーザー以外で特定のアクションを実行しようとした場合には、トップページにリダイレクトさせる、 if_not_adminメソッドも作成し、before_actionで設定しました。
class Admin::RestaurantsController < ApplicationController before_action :if_not_admin #中略 private def if_not_admin redirect_to root_path unless current_user.admin? end end
最後に、edit, show, destroy などのアクションで使用する変数をセットします。
class Admin::RestaurantsController < ApplicationController before_action :if_not_admin before_action :set_restaurant, only: [:show, :edit, :destroy] # 中略 private def if_not_admin redirect_to root_path unless current_user.admin? end def set_restaurant @restaurant = Restaurant.find(params[:id]) end end
そのほかのアクションに必要な設定は別途していると思ってください。
routingの設定
この時のルーティングは下記ように設定しています。 restaurants#indexやrestaurants#show が二つあることになりますが、それぞれ、管理ユーザー(admin)用と、一般ユーザー用とに分けることができました。
# routes.rb resources :restaurants, only: [:index, :show] namespace :admin do resources :restaurants, only: [:index, :new, :create, :show, :edit, :destroy] end end
rake routesの結果も下記の通り。
管理者用のページは /admin/restaurants (indexアクション) など /admin ディレクトリ下に配置することができています。 これで、管理者用ページと、一般ユーザー用ページが分かれて全体的にわかりやすいサイトの構造になりました^^
Gemについて
なお、管理者画面なども作りたい場合には、
「rails_admin」(管理画面を生成するGem) 「cancancan」(管理者権限を設定するGem)
などがあるようです。 こちらも機会があれば調べてみたいです。
それでは、ここまで読んでくださりありがとうございました^^ 次回は、form_withでselect boxを実装した時の設定が色々勉強になったので、それについて投稿してみたいと思います。
6/13追記:
6/11投稿時点では、edit, showなどの一部アクションが表示できないエラーが発生しておりましたが、その後無事解決しました。(単純な記述ミスでした。トホホ・・・)
ありがたいことに、お仕事をぽろぽろいただいてしまった。いただけた背景の考察とまとめ。
どうもこんにちは、デザイナー兼フロントエンドエンジニア(修行中)のタヌキです。
プログラミングスクールが終わって早10日弱。その間何をしていたかというと…
名刺を作ったり
受託した事業のチラシを作ったり
パンフレットを作ったり
パソコン講習の教科書を作ったり
WEBサイトを作ったりと
…個人事業主としてのお仕事をバリバリしていました^^;
しかも8割以上DTPの仕事でしたので、コードはほとんど書けていません(涙)
もうすぐ一区切りなので、それから頑張ります。。。
仕事を辞めてはや2ヶ月。
その間スクールに通いつつでしたが、本当に本当にありがたいことに、たくさんのお仕事をいただいてしまいました。
昼前から夜遅くまでスクールに通いつつ、受けたお仕事は8件くらい…?
個人事業主駆け出しとしては、結構すごい数なのではないでしょうか?
(あ、でも就職は目指しています!落ち着いたらすぐ就活始めます!!)
友人にも
「そんなにお仕事獲得できてすごいね〜」
と(呆れ半分かもしれませんが)褒めてもらえたので、どうやってお仕事を獲得したのか、知見をまとめておこうと思います。
あくまでも、私の経験に基づいたところもあると思いますが、出来るだけ汎用性の高そうな内容を抽出してお話ししますので、これからお仕事を獲得しよう!という方のご参考になれば幸いです。
ここでは、お仕事を獲得するに至った方法を「手段」、お仕事を獲得した経路を「ルート」にわけて、それぞれにやってきたことをお話ししようと思います。
まずは獲得の「手段」から。
手段1:ボランティア活動/人助け・お手伝い
実は私、誰かに喜んでもらうのが趣味でして、時間が許す限り、いろいろな知り合いのところでボランティアをしていました。
今、一番大きな仕事をいただいている団体さんからは、
(1)チャリティーマラソン大会のブース運営、
(2)マーケティングツールの作成支援、
(3)マーケティング戦略提案
など、色々と(楽しんで)お手伝いさせていただきました。
そんな中で、自然と「タヌキさん、デザインやれるんだって?これ頼める??」
と制作系のお話もいただいた形になります。
「誰かの力になれる」というのが楽しくて、力不足ながらも誠実にお手伝いさせて頂いたので「頼むならこの人」と思っていただけた様です。
手段2:いろいろなイベントへの参加
二つ目は、繰り返しいろいろなお仕事をくれるある個人商店。
こちらはそこのお嬢さんと、ソーシャルビジネスの勉強会で会ったのがきっかけで最初のお仕事いただきました。
大変ありがたいことに、お嬢様が、お父様に紹介してくださった形です。
もちろん、最初は名刺などの小さなものからでした。
個人事業主として初めてのお仕事だったので、嬉しくて採算度外視でできる精一杯の提案をしました。
複数案のデザインを提案したり、
どんな人に名刺を渡すことが多いのかをヒアリングして、
それに合った内容をご提案したりなど。
結果、大変喜んでいただいて、次第にパンフレット、ウェブサイトなどボリュームのあるお仕事もいただけるようになりました。
▼作成したWEBサイト(この時は既存CMSを加工して使用)
www.yakiniku-sakuraen.com
ここでも相手に喜んでもらいたいという気持ち、
そして誠実に取り組むこと、
さらに色々提案してみた、
というのが次の仕事につながっています。
手段3:SNSでそれなりの数の人に呼びかけてみた
3つ目は、SNSです。
直近の仕事を退職した際に、
「退職します〜、何か私にできることあったら言ってください〜」
とSNS上で宣言したところ、複数のお仕事オファーをいただきました(*´∀`)
中でも、元上司が噂をいろいろ聞きつけて、楽しいお仕事をくださいました。
元上司とはSNSで繋がっていないのですがw
気心もしれているし、仕事ぶりも分かるし、頼みやすかったんだと思います。
もちろん、円満退職だったというのも大きかったと思いますけれど。
今回はFacebookで呼びかけたのですが、Facebookでは友達数が700人弱いたのも大きかったと思います。
名刺交換がわりに長年利用してきた効果があったのかもしれません。
以上、
1.ボランティアなど業務外の活動
2.イベントへの参加
3.SNSでの呼びかけ
の三つの手段からお仕事をいただいていた形になります。
また、それぞれの場面において、誠実に仕事をしたり、相手のためにより良いソリューションを見つけられないかいろいろ考えて提案してきました。
次に、仕事を獲得した「ルート」について、いろいろ考えてみたいと思います。
ルート1:友人
まず、SNSでの繋がりも含めた「友人」の繋がりが一番大きかったです。
特に、私の周りにはソーシャルビジネスをやっている人が多かったので「小さな起業家」「自分で事業を持っている、または自分で事業を動かせる」立場の人が多かったのが1番の要因だと思います。
もちろん、人として好きなのでおつきあいさせていただいている間柄にはなりますが、どんな友人が何人いるか、そしてその方々と、緩く良い紐帯を保ちながらつながっていたことが結果に繋がりました。
ルート2:仕事上の繋がり
また、今回オファーをいただいた方の大半は、仕事を通じてつながった方々でした。いろいろな人に出会える幸運な立場で仕事をさせていただいていたのもあるかもしれませんが、仕事ぶりを知っていただいた上でつながっていたこと、そしてその後もSNSなどで自分の価値観や仕事の様子を発信していたので、人としてあるいは職業人として信頼していただいたのだと思います。
ルート3:家族
こちらは、まだ獲得には至っていないのですが、ありがたいことに、夫が私の仕事を方々に売り込んでくれているようです^^;
夫のつながりにも小さな事業の主さんがたくさんいるので、「何か力になれることがあれば」との気持ちで、お話をきかせていただいています。
ルートについては簡単にまとめましたが、
・起業家や事業主と繋がる
・ゆるーく良好な関係を保つ
・自分の仕事ぶりについて発信して知ってもらう
などが共通項としてあげられるかと思います。
補足
以上、いろいろ書かせていただきましたが、誤解を招かないようにお伝えしたいのは、私は決して「お仕事が欲しいから」という理由で誰かとつながったことはなく、
その人がやっていることが素敵で
その人が人間として好きで
単純に友達になりたいから
つながっています。
今回たまたま、「お仕事の依頼」という形でも繋がらせていたくことができました。
それ自体は大変ありがたいし嬉しいことで、これからも何とぞよろしくお願いしますという想いです。
これからも、私にできることがあれば可能な限りお手伝いさせていただきたく思っています。
人と繋がることでお仕事以上に得られるものはたくさんありますし、何より楽しいです。
これから個人でお仕事を獲得しよう!と思っていらっしゃる方も、どうぞ楽しみながらいろいろな方と交流を深めていっていただけましたら幸いです。
目指せ、友達1000人!
以上、長くなりましたが最近のお仕事の経路のまとめでした。
(・・・今回も簡潔に書けなかった。。。)
初めまして:自己紹介とアラサー女子がプログラミングスクールに通った理由
初めましてこんにちは、川崎市在住、駆け出しデザイナー&&エンジニア目指して修行中の、タヌキ…ではなく、あずみといいます。どうぞよろしくお願いします。
駆け出し、といっても本当に駆け出しで、まだプログラミングを始めて2ヶ月半。デザインの仕事も始めて半年ほどです。
それまでは若者就労支援のNPOで、若者に基礎的なITスキル講習を実施したり、若者就労支援でITスキル講習を実施する仲間(=団体)を増やしたりしていました。
あとは、美大出身で、小さな組織だったこともあり、社内デザイナー、複業のデザイナーなんか(illustrator, photoshopは一通り使える)もやっていました。
そんな私、実は30代も半ばが近いのですが、この春、思い立って仕事を辞め、今をときめくプログラミングスクールに申し込みました。
先日無事卒業し、今はフロントエンドエンジニアとしての転職を目指しています。
…ですが。。。。。
「30代半ば」「仕事を辞め」のあたりで、
「あー。。。、、、」
と思われた方もいるかもしれません。ご察しの通り、未経験からエンジニアへの転職には、ちょっと遅い、いや、遅すぎるぐらいのチャレンジになります。
本当〜に、もっと早く始めれば良かった…というのは、在学中も今でもとてもとても感じていますので、ここではポジティブに、自己紹介とこれからの話に努めたいと思います。
もし、お時間があれば、なぜ、いい年した私が突然エンジニアになろうと思ったのか。そしてなぜプログラミングスクールに通ったのか、しばし自分語りにお付き合いくださいませ。
また、私は普段デザイナー兼フロントエンドエンジニアとしてWEBサイト制作のお仕事も請け負っていますので、どんな人なのか、お仕事への向き合い方など、人となりを感じていただけたら嬉しいです(^o^)
前置きが長くなりましたが、ここから自己紹介に入ります、どうぞよろしくお願い致します。
関心のはじめは、若者支援
私が明確にIT業界に興味を持ったのは、若者就労支援の仕事をしていたときです。それまでもコンピューターは大好きで、Illustrator や Photoshopを勉強したり、WEBデザインの職業訓練校に通ったりもしていました。ですが「エンジニアになりたい!」と明確に思ったのは、ここでの経験が土台になっています。
私の働いていたNPOは、いわゆる「ニート」「ひきこもり」などといわれる人たちの就労を支援する機関で、当時は(いまでもですが)IT企業へ若者を送り出すことに注力している団体でした。
その中で、私はある外資系IT企業との連携プロジェクトの担当をしていました。そして、多くのNPOやIT系中小企業、そしてプロジェクトオーナーの外資系企業と連携をしながら(短い言葉で言うと、プロマネをしながら)、年間数千人の若者に基礎的・基本的なITスキル講習を届けていました。
▷プロジェクトの概要はこちら
(2018年3月末に厚労省事業に引き継がれる形で終了)
▷プロジェクトの学術的考察:ケーススタディ「企業CSR×NPO」の協働が「政策」になるまで
スポンサーとなっている外資系企業のコーポレートミッションは「to empower every person and every organization on the planet to achieve more.(地球上の全ての人と個人がより多くのことを達成できるようにする)」。
その理念のもと、「働くこと」に何らかの困難を抱えている、20代〜30代の若者達の未来を開くのが私たちの仕事でした。
中には下記のような素晴らしい事例も出てきて、誰かの人生を幸せにできる仕事内容に、大変やりがいを感じて働いていました。
▷事例紹介:高卒後10年間のフリーター生活を経て念願のプログラマへ
また、「人生100年時代に、いくつになってもチャレンジし続けられる、人生の可能性を広げられ続ける分野がITなのだ」という外資系企業の担当の方の熱い言葉に私も胸を打たれ、
「ITって素晴らしい」「人生の可能性が広がる」「ぜひITスキル講習を多くの人に勧めたい」と、
とITの持つ価値にだんだんと心酔する様になっていったのです。
トリガーは、病気
…そんな私でしたが、ある時、夏の暑い日になると、起き上がれないほどの頭痛と嘔吐を繰り返すようになってしまいました。
その後も、同様の症状が継続。脱水症状を起こしたり入院したり…、仕事も休みがちになりました。
診断名は、偏頭痛。
それまで知らなかったのですが、日光で偏頭痛を起こす人がいるらしく、また頭痛がひどくなると嘔吐をする人もいるようで、私はその両方に合致していました。
初めは1時間程度外に出ると発症していた偏頭痛も、段々と外に出られる時間が減っていき、時間帯にもよりますが、昼間は15分程度以上外に出るのが難しくなってしまいました。
さらに困ったことに、そのNPOが駅から徒歩15分の位置に立地していました。そのため、日常の通勤に困難をきたすようになり、退職。それが1年前のことです。
その後は駅徒歩10分の別の会社に勤めつつ、プロマネ経験を生かした業務をしてきました。しかし、やはり若者支援の仕事が大好きだったので、退職をしても元上司から複業&家の中できる仕事をもらって、IT x 若者の支援に関わってはきました。
そのうち段々と症状が悪化。出張や顧客訪問、突発的な外出などを含む業務全般に対応できなくなってきてしまいました。本業でプロマネ、複業で若者支援をしてきたのですが、本業の方が成り立たなくなってきたのです。
いよいよまずい、私どうする??
…と思った時に、思いついたのがIT分野での就職だったのです。
「そうだ、ITには多くの可能性があるじゃないか」
「多くの若者が新しいステップに歩みだしたじゃないか」
過去に新しいステージに歩みだした、多くの若者の存在が、決断を後押ししてくれました。
できることと、大切にしたいこと
ただ、ITにとてもポジティブなイメージがあるからと言うだけでエンジニアになろう、と思ったわけではなく、方向性を変えるにあたっては、自分のできること・できないことをしっかり棚卸ししました。
その結果がこちらになります。
私の場合、働きたい業種についてははっきりしていたので、職種について色々考えてみました。
小さな組織でずっと働いてきたので、「できること」のカバー範囲が比較的広いのが特徴になります。
- 初職は教員なので、人前で喋るのは得意(でも、体を壊しがち)
- 若者支援のNPOに努めていたので、支援経験はあり(でも、心理的に疲れがち)
- 特技は、人と人とを繋ぎながら、事業を作ること(だんだん、健康上困難になってきた)
- そうして、最後に残ったのは…ものつくり系
もともと、美大出身なのでクリエイティブ系の業務は得意でした。また、WEBデザインの職業訓練校に通ったこともあり、その時は成績も良かったので、コンピューターを用いた制作が得意という自覚はありました。
そのため、初めはWEBデザイナーになろうと思いました。しかし、私がWEBデザインを学んだのは5年以上前。知識もアップデートしなければなりませんでした。
どうせアップデートをするなら、いっそのことバックエンドも作れるようになろう。
そう思って通い始めたのが、プログラミングスクールでした。
こうして、今に至ります。学んだこと、学習の成果などはこれから発信して参りますね。
最後に、ごあいさつ
病気になったのは数年前、本当にもっと早く転向すればよかったと後悔することは数限りなしですが、こぼれたミルクを嘆いても仕方ないし、人生の中で一番若いのが今日ですので、できることを精一杯頑張っていこうと思います。
もし、どんな人なのか知りたい、作品を見たい、と思ってくださった方がいましたら、どうぞお気軽にTwitterまでご連絡ください。
ポートフォリオサイトは間もなく準備してまいります。引き続き何卒よろしくお願いいたします^^(次回はもっと短く簡潔に書きます〜)