Ruby on Rails 入門2
こんにちは。いとうです。前回からの引き続きでTwitter的なの作成していきます。今回はログイン機能までやりたい。↓前回のやつ
homeコントローラーの作成
twitterで言うタイムライン的なページとしてhomeコントローラーを作成
$ rails g controller home index
create app/controllers/home_controller.rb
route get 'home/index'
invoke erb
create app/views/home
create app/views/home/index.html.erb
invoke test_unit
create test/controllers/home_controller_test.rb
invoke helper
create app/helpers/home_helper.rb
invoke test_unit
invoke assets
invoke coffee
create app/assets/javascripts/home.coffee
invoke scss
create app/assets/stylesheets/home.scss
$
http://localhost:3000/home/index 以下のようにページが表示されるか確認。もし出てなかったら、なにかのエラーが出てるはずなので、rails s でサーバ起動してるところで確認する。
で、/home/index のindexが邪魔だから消すための作業
config/routes.rb
Rails.application.routes.draw do
get 'home' => 'home#index' # 修正
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end
http://localhost:3000/home 上記の作業がうまく行ってればこれで表示できるようになっているはず。はず。
ログイン機能
railsにはdeviseっていう便利なものがあって秒でログイン機能作れちゃうんです。ほんと神だと思う。
Gemfile
gem 'devise' # 末尾に追記
で↓のコマンドを実行。一応メッセージにはエラーがでてないかを確認
$ bundle install
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
Fetching gem metadata from https://rubygems.org/............
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies...
Using rake 13.0.1
Using concurrent-ruby 1.1.6
Using i18n 1.8.2
Using minitest 5.14.0
Using thread_safe 0.3.6
Using tzinfo 1.2.6
Using activesupport 5.2.4.1
Using builder 3.2.4
Using erubi 1.9.0
Using mini_portile2 2.4.0
...以下略
$
で次はこれ。config以下にファイル作られて、使い方の説明ぽいこと言われてる。
$ rails g devise:install
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
===============================================================================
$
で、次はこれ。これはmodel作ってくれてる模様
$ rails g devise user
invoke active_record
create db/migrate/20200220034507_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
$
↑でできたmigrateファイルをdbに反映させる。ログ的にはcreate tableしてindexをはってる感じかな多分
$ rails db:migrate
== 20200220034507 DeviseCreateUsers: migrating ================================
-- create_table(:users)
-> 0.0091s
-- add_index(:users, :email, {:unique=>true})
-> 0.0016s
-- add_index(:users, :reset_password_token, {:unique=>true})
-> 0.0021s
== 20200220034507 DeviseCreateUsers: migrated (0.0165s) =======================
$
viewの作成
ちゃんと見ればわかるけど、app/views/配下に色々とファイルができてるはず。
$ rails g devise:views users
invoke Devise::Generators::SharedViewsGenerator
create app/views/users/shared
create app/views/users/shared/_error_messages.html.erb
create app/views/users/shared/_links.html.erb
invoke form_for
...以下略
$
controllerの作成
怒られた。。。routeの設定やれってことかな?
$ rails g devise:controllers users
create app/controllers/users/confirmations_controller.rb
create app/controllers/users/passwords_controller.rb
create app/controllers/users/registrations_controller.rb
create app/controllers/users/sessions_controller.rb
create app/controllers/users/unlocks_controller.rb
create app/controllers/users/omniauth_callbacks_controller.rb
===============================================================================
Some setup you must do manually if you haven't yet:
Ensure you have overridden routes for generated controllers in your routes.rb.
For example:
Rails.application.routes.draw do
devise_for :users, controllers: {
sessions: 'users/sessions'
}
end
===============================================================================
$
config/routes.rb
怒られたからこれやっとく。多分後々また修正するけど
Rails.application.routes.draw do
devise_for :users
get 'home' => 'home#index'
# 以下の4行を追加
devise_for :users, :controllers => {
:registrations => 'users/registrations',
:sessions => 'users/sessions'
}
end
http://localhost:3000/users/sign_up このリンクにアクセスして、表示されれば成功。
サインアップしてみると、 http://localhost:3000/ に飛ばされる。わかりづらいけど、サインアップできてる。
確認
こんな感じで表示されてればOK。こーゆー時いつも思うけど、日本時間に変更するの面倒。(4時に作業してるわけではないです
$ rails dbconsole
SQLite version 3.11.0 2016-02-15 17:29:24
Enter ".help" for usage hints.
sqlite> .mode line
sqlite> select * from users;
id = 1
email = aaa@aaa.com
encrypted_password = $2a$11$GBcVaUitWID2ferNlzlDdOZJdsMmGth6A6PxjUWjLwfgbVwEXP6.m
reset_password_token =
reset_password_sent_at =
remember_created_at =
created_at = 2020-02-20 04:33:44.764439
updated_at = 2020-02-20 04:33:44.764439
sqlite>.quit
$
git 操作
キリが良いタイミングでコミットしておくと吉
$ git add .
& git commit -m "add: deviseログイン"
今日はこんなところで終了。思ったより長くなった気がする。。。
次の記事
Slackの招待リンク
僕個人(メモ用)のslackチームがあるんだけど、30日間有効なリンク貼っておきます。僕とチャットで話したいといかの物好きは一緒に勉強しましょう。今は暇なので話相手になってもらえたら嬉しいです。