4児パパ プログラミングを学ぶ

プログラミングは未経験で30歳過ぎても学べる!

RailsにてDevise作成時、configファイル系が作成される為、必ずサーバーの再起動を!!!NoMethodError (undefined method `devise_for')の解決の仕方

f:id:hitoiws:20170529072733j:plain

家族、お子様連れで楽しめるCITY OF DREAMSです。ここはマニラ各空港にアクセスがよく、 できたばかりでホテルも綺麗です。

 

f:id:hitoiws:20170529072953j:plain

 子供達が十分に楽しめる場所です。

 

f:id:hitoiws:20170529074956j:plain

 

City of dreamはフィリピンへ行かれる人が初心者でも、簡単にアクセスできますし、子供達も楽しめますし、大人たちはカジノなどで、たくさん遊ぶことができます。

 

 

フィリピンは南地方を中心に、治安が悪くなり始めています。フィリピンに渡航される場合は十分に情報収集して、渡航しましょう!!!

フィリピン南部に戒厳令が出ています必ず確認しましょう!

 

北朝鮮のミサイルなどもとても気になります。フィリピンで治安が悪くなったら日本大使館にすぐに助けを求めましょう。

 

 

  

■目次

1.Railsのgem "devise"の手順!

2.Config系のファイルを作ったり、いじったりしたら、とりあえずサーバーを再起動!

3.その次は、$ rails generate devise:views

4.ログインしたかどうか、フラッシュメッセージを使いましょう!

5.ログイン、ログアウトのリンクを作る

6.Deviseは優れもの!英語がデフォルトですが、日本語訳が簡単に作れる!!

7.一度動作確認を!サーバーの再起動を忘れずに!

8.ログインしないとアクションできない様にする。

9.Deviseの使い方は、グーグル先生にきく

10.プログラミングで可能性を広げる

11. 記事を読んでくれる人に感謝です。

 

 

1.Railsのgem "devise"の手順!

Railsを開発する時に素晴らしく優れているのは、やはり"devise"ですよね。このdeviseはぜひものにしましょう!!!

 

1.まずgemファイルに、gem "devise"を追記。

 

2.bundle insatll --path vendor/bundle

 

$rails g devise:install

$ rails generate devise:install

Running via Spring preloader in process 3682

      create  config/initializers/devise.rb

      create  config/locales/devise.en.yml

===============================================================================

 

Some setup you must do manually if you haven't yet:

 

  1. Ensure you have defined default url options in your environments files. Here

     is an example of default_url_options appropriate for a development environment

     in config/environments/development.rb:

 

       config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

 

     In production, :host should be set to the actual host of your application.

 

  2. Ensure you have defined root_url to *something* in your config/routes.rb.

     For example:

 

       root to: "home#index"

 

  3. Ensure you have flash messages in app/views/layouts/application.html.erb.

     For example:

 

       <p class="notice"><%= notice %></p>

       <p class="alert"><%= alert %></p>

 

  4. You can copy Devise views (for customization) to your app by running:

 

       rails g devise:views

 

===============================================================================

 

$rails g devise user

Usersテーブルを作成します!

 rails generate devise user

Running via Spring preloader in process 3772

      invoke  active_record

      create    db/migrate/20170520110656_devise_create_users.rb

      create    app/models/user.rb

      invoke    test_unit

      create      test/models/user_test.rb

      create      test/fixtures/users.yml

      insert    app/models/user.rb

       route  devise_for :users

 ここの時点で、routingで、 devise_for :userがroutes.rbはファイルに記載されます。

 

 

そんでMigrateマイグレーションファイルの作成。(今でもマイグレートする度にドキドキしてしまうんですよね!笑)

$rake db:migrate

usersテーブルを作成します!!

$ rake db:migrate

== 20170520110656 DeviseCreateUsers: migrating ================================

-- create_table(:users)

   -> 0.0688s

-- add_index(:users, :email, {:unique=>true})

   -> 0.0149s

-- add_index(:users, :reset_password_token, {:unique=>true})

   -> 0.0072s

== 20170520110656 DeviseCreateUsers: migrated (0.0913s) =======================

 

ここまで順調に進めたら、ローカルでの立ち上がっているサーバーで挙動を確認したいもの。

 

順調に進めたら、

NoMethodError (undefined method `devise_for' for #<ActionDispatch::Routing::Mapper:0x007fd85f354eb0>):

  config/routes.rb:4:in `block in <top (required)>'

  config/routes.rb:1:in `<top (required)>'

 

 

なんとここでエラー。

でもこの解決方法はなんともなくできます!

 

目次にもどる

 

2.Config系のファイルを作ったり、いじったりしたら、とりあえずサーバーを再起動!

手順通りに開発してきたのにも関わらずに、どこかしらでエラーに遭遇してしまう事が、誰しも開発してきた人なら経験してきたのではないでしょうか。私は、Railsで開発しはし始めは、とことん赤いあのエラー画面をみるたびにテンパっていました!

 

今でも少しはテンパりますが、ある程度のデバッグを教えて頂いてきたので、対応することができるようになりました。

 

詳しくは説明できませんが、config系のファイルはサーバーを立ち上げることで正常に作動することがあります。今回の私の件では、おそらく、最初のRails のgemのdeviseをインストールした時に、

$railsgeneratedevise:install

createconfig/initializers/devise.rb

createconfig/locales/devise.en.yml

上記二つのファイルが作成された為に、サーバーの再起動が必要でした。

 

そのまま、

$rails g devise user

$rake db:migrate を進めてしまった為、サーバーの再起動にも関わらずに、どんどん前に進んでしまいエラーに遭遇してしまいました。

 

目次にもどる

 

3.その次は、$ rails generate devise:views

そのままついでに、Deviseの立ち上げ(初期設定)の進め方をお伝えします!

 

gem はdeviseだけではなく使う時に、そのgemの製作者や実装者が、そのgemを使いたい開発者の為に、簡単に実装できるようにREADME.md において説明してくれています。

https://github.com/plataformatec/devise 

参考にしてみましょう!

 

さて次上記の、

$rails g devise user

$rake db:migrate

ここまで行ったら次は、

$rails g devise:views

$ rails generate devise:views

Running via Spring preloader in process 4082

Expected boolean default value for '--markerb'; got :erb (string)

      invoke  Devise::Generators::SharedViewsGenerator

      create    app/views/devise/shared

      create    app/views/devise/shared/_links.html.erb

      invoke  form_for

      create    app/views/devise/confirmations

      create    app/views/devise/confirmations/new.html.erb

      create    app/views/devise/passwords

      create    app/views/devise/passwords/edit.html.erb

      create    app/views/devise/passwords/new.html.erb

      create    app/views/devise/registrations

      create    app/views/devise/registrations/edit.html.erb

      create    app/views/devise/registrations/new.html.erb

      create    app/views/devise/sessions

      create    app/views/devise/sessions/new.html.erb

      create    app/views/devise/unlocks

      create    app/views/devise/unlocks/new.html.erb

      invoke  erb

      create    app/views/devise/mailer

      create    app/views/devise/mailer/confirmation_instructions.html.erb

      create    app/views/devise/mailer/email_changed.html.erb

      create    app/views/devise/mailer/password_change.html.erb

      create    app/views/devise/mailer/reset_password_instructions.html.erb

      create    app/views/devise/mailer/unlock_instructions.html.erb

 

このコマンドで一気に、ログイン画面のviewの基礎を作り上げることができます。

ちょっとのぞいてみましょう!

 

$rake routesコマンドで

$ rake routes

                  Prefix Verb   URI Pattern                    Controller#Action

                    root GET    /                              top#index

        new_user_session GET    /users/sign_in(.:format)       devise/sessions#new

            user_session POST   /users/sign_in(.:format)       devise/sessions#create

    destroy_user_session DELETE /users/sign_out(.:format)      devise/sessions#destroy

           user_password POST   /users/password(.:format)      devise/passwords#create

       new_user_password GET    /users/password/new(.:format)  devise/passwords#new

      edit_user_password GET    /users/password/edit(.:format) devise/passwords#edit

                         PATCH  /users/password(.:format)      devise/passwords#update

                         PUT    /users/password(.:format)      devise/passwords#update

cancel_user_registration GET    /users/cancel(.:format)        devise/registrations#cancel

       user_registration POST   /users(.:format)               devise/registrations#create

   new_user_registration GET    /users/sign_up(.:format)       devise/registrations#new

  edit_user_registration GET    /users/edit(.:format)          devise/registrations#edit

                         PATCH  /users(.:format)               devise/registrations#update

                         PUT    /users(.:format)               devise/registrations#update

                         DELETE /users(.:format)               devise/registrations#destroy

 

 

/users/sign_upに着目します!

 new_user_registration GET    /users/sign_up(.:format)       devise/registrations#new

f:id:hitoiws:20170520213723p:plain

おなじみのデバイスのデフォルトの画面が出ましたね!! 

(ここまでdevise以前の開発でサーバーを起動したまま開発していた場合、必ずサーバーを再起動しましょう !)

 

 

目次にもどる

 

4.ログインしたかどうか、フラッシュメッセージを使いましょう!

f:id:hitoiws:20170529054020p:plain

*上記から進めていくとこの時点では 、まだ日本語ではないので、気にしないでください。

<section class="main-header">
<p class="flash"><%= notice %><%= alert %></p>
</section>

f:id:hitoiws:20170529054634p:plain

 

viewファイルに関しましては、自分が開発したいようにコーディングしましょう。ここでは参考までにして頂けたら幸いです。

 

参考にしたリンク。

qiita.com

 

目次にもどる

 

5.ログイン、ログアウトのリンクを作る

Deviseをインストールしたりして組み込むことで、Devise特有のメソッドが使えるようになります。その中で基本的なログインに関してのメソッド、"user_signed_in?"メソッドをしようします。これはメソッドで一つの決まりごとなので、そのまま覚えてしまいましょう!

 

app/views/layouts/application.html.erb

<header>
<ul>
<li><%= link_to "ホーム", xxxs_path %></li>
<li><a href="#">USER</a></li>
<li><%= link_to 'マイページ', edit_user_registration_path %></li>
<% if user_signed_in? %>
<li><%= link_to 'ログアウト', destroy_user_session_path, method: :delete %></li>
<% else %>
<li><%= link_to 'ログイン', new_user_session_path %></li>
<li><%= link_to 'サインアップ', new_user_registration_path %></li>
<% end %>
</ul>
</header>

f:id:hitoiws:20170529055302p:plain

 

目次にもどる

 

6.Deviseは優れもの!英語がデフォルトですが、日本語訳が簡単に作れる!!

Deviceはデフォルトでは英語になっています。エラーメッセージが英語訳なので、日本語訳に直すことが簡単にできます。無論、英語表記のままで言い方はこのままでもいいかも知りませんが。私は今後は英語圏のアプリを作るため、ここは省力していきます。

 

 config/locales/devise.en.ymlを開いて見ましょう!

f:id:hitoiws:20170529060605p:plain

 これらはデフォルトで英語訳になっていますが、これらを日本語訳に直すことができます。

config/application.rbを開けます。

このファイルの下部にある

# config.i18n.default_locale = :deを

config.i18n.default_locale = :ja

これで日本語化の設定がされます。 

 

新規にconfig/locales/の配下にdevise.ja.ymlというファイルを作ります。

プロのエンジニアの先人たちが既に日本語訳を作ってくれています。ありがたい限りです。

for devise 4.2.0 · GitHub ここにアクセスします。

そのあとに作成しました、devise.ja.ymlを全てコピペします!

これを完成することで、先ほどのフラッシュメッセージなどは、日本語訳になります。 

f:id:hitoiws:20170529061849p:plain

 

次に、バリデーションなどのモデルの属性を日本語訳にしていきます。

 

エンジニアの先人たちに甘えましょう!!
先ほど同じように新規にconfig/locales/の配下にmodel.ja.ymlを作成して、

rails-i18n/ja.yml at master · svenfuchs/rails-i18n · GitHubの中身をコピーして、model.ja.ymlに貼り付けます。

 

 

目次にもどる

 

7.一度動作確認を!サーバーの再起動を忘れずに!

 ここまで無事編集できたら、一度動作確認をして見ましょう!

タイトルにもあるように、configファイル系が作成される為、必ずサーバーの再起動をしないと、編集したものが反映しないです。

 

この作業をつい忘れてしまうと、どこがいけないかを探す羽目になってしまいますので、無駄な時間が生まれてしまいます。ぜひサーバーの再起動を忘れずに!

 

目次にもどる

 

8.ログインしないとアクションできない様にする。

よく色々なサイトで、ログインしないとその先が行けなかったりするのを見かけると思います。記事を読んでいて、”この先はログインすれば読めますよ!”みたいなメッセージを出して先に進めなかったりしたり、 記事の投稿はログインしてからしてください。という様なサイトを見かけると思います。

 

これはRailsだと、authenticate_user!というメソッドを使っています。ですので、

アクションコントロールに定義をします!

class ChopsController < ApplicationController
before_action :authenticate_user!
before_action :set_chop, only:[:edit, :update, :destroy]

f:id:hitoiws:20170529063504p:plain

 このメソッドで

True(ログインしている)→そのアクションへ。

False(ログインできなかった、ログインしない)→再びログイン画面へ。

という流れになります。

 

 Deviseはログインしたりするユーザー管理のためのGemなので、Userモデルにいずれnameカラムが必要になります!

 $ rails g migration AddNameToUsers name:string

そしてRailsでおなじみにのマイグレート!

 $ rake db:migrate

 

 

nameカラムまで作ったのなら、ついでにDeviseのストロングパラメーターも編集しましょう!!

Deviseは便利で、セキュリティー面も断トツに優れていますが、ただちゃんと編集していかないと、うまく機能しません。

 Deviseには"configure_permitted_parameters"という独自のストロングパラメーターを設定できるメソッドがあり、":devise_controller?"を追記して、Deviseのコントローラーのみで起動させます。

app/controllers/application_controller.rb  を編集します。

 

f:id:hitoiws:20170529065244p:plain

 

最後に下部に、

protectedを記載し、違う場所からのメソッドの呼び出しを防ぐことができます!

 

目次にもどる

 

9.Deviseの使い方は、グーグル先生にきく

Deviseでなくともログイン機能は作れますが、やはりログイン機能はデバイスが一番いい。Deviseの情報は先人たちが既に色々な角度でトライしています。

 

もしDeviseで困ったら、"rails devise","devise rails views"などといったように、自分が調べたいように検索してしましょう。 英語圏は情報は分母が違うため、よりいっぱい溢れていますよ。

 

目次にもどる

 

10.プログラミングで可能性を広げる 

f:id:hitoiws:20170529075253j:plain

 時間を見つけBoracay島に行って来ました。この間でもブログの更新やプログラミングスクールを卒業するためにの課題制作など、インターネットがあればできることをやっていました。

 

この時は4連休したのですが、それでも海外に行くことができます。私の基盤はまだまだサラーリマンとしてが強く、恥ずかしいのですが完璧にはエンジニアになれていないですが、連休をみつけ海外に行けるのも、エンジニアのいいところでしょう。

 

f:id:hitoiws:20170529075543j:plain

boracay島に行く時に撮影しました。国内線は往復で一万円もしません。ですので、セブパシフィックでキャンペーン中はマニラまで片道で訳1万3千円ほどで、交通費3万ぐらいで楽しめます!

 

最近フィリピンへのアクセスは安くなり、とても容易になりました。プロのブロガーやエンジニアもリモートなどで作業されている方も、最近知り合いになりました。

 

 

とあるRailsエンジニアは日本の冬の寒い時期だけを約5ヶ月フィリピンで過ごし、他はオーストラリアや日本で過ごされて、リモートで仕事されている人もいました。

 

 

フィリピンは日本が受ける収入にとって、とても物価が安いです。その先輩Railsエンジニアは約5ヶ月をフィリピンで過ごされ、貯金と収入もうまくいっているとのこと。投資に関してはここでは割愛させて頂きますが、日本と変わらずの収入で出費を抑えて生活できるのも、海外でリモートする特権だと思います。これも一つの自分に対しての投資ですよね。

 

 

働き方は色々ある。会社員として空いている時間を使って、自分への投資をしてもいいと思う。私は会社の休憩時間中は、ひたすら情報を収集したりあるいは、寝てるふりをしてマインドフルネスを実行している。マインドフルネスを3分でもやって一度頭の中を整理したりすると、仕事終わりに家でリフレッシュした状態で作業に入れる。

www.papa-programing.jp

 

 

 

また空いている時間を利用して、起業をする準備だっていいと思う。

 

10%起業 1割の時間で成功をつかむ方法

10%起業 1割の時間で成功をつかむ方法

10%起業 1割の時間で成功をつかむ方法

10%起業 1割の時間で成功をつかむ方法

 

 この本は何度も紹介してきましたが、本当にこんなやり方でもいいと思うし、これをやることで、うちに秘めているリスクの一つを回避することができます。

 

今後もRailsやフィリピンについての情報を少しでも発信していきたいと思います。

 

目次にもどる

 

11.記事を読んでくれる人に感謝です。

最近記事を読んでくれる人が多くなり、本当に嬉しい限りです。

これからも精進して参りますので、ぜひ応援して頂けら幸いです!!

 

時たま頂けるあたたかいメッセージがとても嬉しいです。

 

もしよかったら過去の記事を読んで頂けたら幸いです。

 

 

Railsで新規プロジェクトを始める時に、前回までのファイルとシステムとが干渉しないようにする方法 【永久保存版】 

www.papa-programing.jp

 

 

グーグルアドセンス広告が表示されない?違反は無いみたいだけど、広告が出ない場合の対処の仕方 - 4児パパ プログラミングを学ぶ

www.papa-programing.jp

 

 

ActiveRecord::RecordNotFound in "コントローラー名"Controller#update Couldn't find "モデル名" with 'id'=confirmの対処の仕方 解決方法! - 4児パパ プログラミングを学ぶ

www.papa-programing.jp

 

 

 

フィリピンでsimフリーを利用して、日本から持ってきた携帯を使おう!空港でsimフリーはタダで配られている!!!

www.papa-programing.jp

 

 

ブログアクセスアップ10%目指そう!はてなブログのカスタムURLは簡単! 

www.papa-programing.jp

 

 Webエンジニア1人とライター1人いれば、ビジネスが成り立つ!!

www.papa-programing.jp

 

マインドフルネス(瞑想)をしよう。3分で脳疲労を解消!脳疲労をとることで仕事に活気と生活に安定を♪

www.papa-programing.jp

 

 

プログラミングを始めたら、はてなブログを有効に使おう!プログラマーになり始めたらブログでアウトプットできる!

www.papa-programing.jp

 

 

 

 ”フィリピン”で”iPhone”を”充電する”!!日本と電圧は違うが怖くない!

www.papa-programing.jp

  

目次にもどる