基本方針:これから作るrailsアプリは社内の特定部署の社員しか使わないので、userのデーターベースは作りますが、大げさなgemやrails8から実装されたauthenticationなどは使わず、管理者が直接データーベースにアクセスし、ユーザー名とパスワードを作るようにし、アプリ側からは新規作成、編集、削除など一切作らないようにします。
まずはデーターベースの作成
[fuji@rails8 TourData]$ rails g model user name:string password_digest:string
invoke active_record
create db/migrate/20250820061510_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb
create test/fixtures/users.yml
[fuji@rails8 TourData]$ rails db:migrate
== 20250820061510 CreateUsers: migrating ======================================
— create_table(:users)
-> 0.0873s
== 20250820061510 CreateUsers: migrated (0.0875s) =
password_digestに注意してください。これは平文でパスワードを入れると、データーベースには暗号化した文字列が入るようになる。
そのためにGEMが必要になるので
[fuji@rails8 TourData]$ gedit Gemfile
# Use Active Storage variants [https://guides.rubyonrails.org/active_storage_overview.html#transforming-images]
# gem “image_processing”, “~> 1.2”
gem “spring-commands-rspec” → これは前に入れた
gem “bcrypt” → これを追記
group :development, :test do
でお約束の
[fuji@rails8 TourData]$ bundle
で最初にtestユーザーでも作っておく、railsコンソールで作るがその前にusers.rbを設定しておく
[fuji@rails8 TourData]$ gedit app/models/user.rb
class User < ApplicationRecord
has_secure_password → これを追記
validates :name, prsence: true, uniqueness: true → これを追記
end
[fuji@rails8 TourData]$ rails c
tour-data(dev)> User.new( name: ‘ユーザー名’, password: ‘パスワード’, password_confirmation: ‘パスワード’).save
TRANSACTION (0.2ms) BEGIN /*application=’TouData’*/
User Create (1.0ms) INSERT INTO `users` (`name`, `password_digest`, `created_at`, `updated_at`) VALUES 後略
そしてデーターベースにログインし、ユーザーが出来ているか確認した。
ログイン画面を作るが、rails ではセッションを使うので
[fuji@rails8 TourData]$ rails g controller Sessions new
create app/controllers/sessions_controller.rb
route get “sessions/new”
invoke erb
create app/views/sessions
後略
routeの変更するがログイン画面を/loginにしたいので
[fuji@rails8 TourData]$ gedit config/routes.rb
Rails.application.routes.draw do
#get “sessions/new” コメントアウトし
get “/login”, to: “sessions/new” これを追記
後略
テンプレートを作る
[fuji@rails8 TourData]$ gedit /app/views/sessions.new.html.erb
<h1>ログイン</h1>
<%= form_for(:session, url: login_path) do |f| %>
<%= f.label :name %>
<%= f.name_field :name %>
<%= f.label :password %>
<%= f.password_field :password %>
<%= f.submit “Log in” %>
<% end %>