toyアプリケーションを作る
$ cd ..
$ rails 7.0.6 new toy_app –skip-bundle
$ cd toy_app/
Gemfile編集
$ gedit Gemfile
source “https://rubygems.org”
git_source(:github) { |repo| “https://github.com/#{repo}.git” }
ruby “3.2.2”
gem “rails”, “7.0.6”
gem “sassc-rails”, “2.1.2”
gem “sprockets-rails”, “3.4.2”
gem “importmap-rails”, “1.1.0”
gem “turbo-rails”, “1.1.1”
gem “stimulus-rails”, “1.0.4”
gem “jbuilder”, “2.11.5”
gem “puma”, “5.6.4”
gem “bootsnap”, “1.12.0”, require: false
gem “sqlite3”, “1.4.2”
group :development, :test do
gem “debug”, “1.5.0”, platforms: %i[ mri mingw x64_mingw ]
end
group :development do
gem “web-console”, “4.2.0”
end
group :test do
gem “capybara”, “3.37.1”
gem “selenium-webdriver”, “4.2.0”
gem “webdrivers”, “5.0.0”
end
gemをインストールし、ロックする
$ bundle _2.3.14_ install
$ bundle _2.3.14_ lock –add-platform x86_64-linux
helloのアクションを追加し、ルートの設定
$ gedit app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
def hello
render html: “Toy_app hello, world!”
end
end
$ gedit config/routes.rb
Rails.application.routes.draw do
root ‘application#hello’
end
でもう一つにターミナルで起動しているサーバーをctrl+cで止め、ディレクトリーを変更し、サーバーを起動
$ cd ..
$ cd toy_app
$ rails s
でlocalhost:3000 でToy_app hello, world!と表示される筈
元のターミナルに戻りgit init, add, commitを行う
$ git init
Reinitialized existing Git repository in /Rails/environment/toy_app/.git/
$ git add -A
$ git commit -m “Add hello”
scaffoldを使いUser データーベースを作成
$ rails generate scaffold User name:string email:string
色々追加されるが、この意味はデーベース名をUserとし、テーブルnameとemailを文字列として作成、続いてデーターベースをマイグレートする
$ rails db:migrate
== 20230811074601 CreateUsers: migrating ========
— create_table(:users)
-> 0.0022s
== 20230811074601 CreateUsers: migrated (0.0022s) ===
ここで、ブラウザから localhost:3000/usersとすると
と表示される筈、New userをクリックするとユーザーを作成出来るので試す。
emailはわざと正しくない(@が無い)ものを入力し、Create Userをクリックし保存(検証をしていないので)。保存出来てしまう
上の画像が保存後のもの、メチャクチャなemailが登録されている。下の方のリンクをクリックすると、その内容の画面になる。ブラウザに http://localhost:3000/users/newと入力し、もう一人作り保存し、http://localhost:3000/users/と入力すると
2人分のリストが表示される。後、チュートリアルにあるように削除などをやってみる。
ルートを設定する
$ gedit config/routes.rb
Rails.application.routes.draw do
resources :users
root ‘users#index’
end
そして、app/controllers/users_controller.rbを見てみると
下の方が表示されていないが、scaffoldにより index, showなどが自動的に出来ている。
Micropostsリソースもscaffoldでコードを生成
$ rails generate scaffold Micropost content:text user_id:integer
データーベースをマイグレーション
$ rails db:migrate
== 20230813055824 CreateMicroposts: migrating =========
— create_table(:microposts)
-> 0.0019s
== 20230813055824 CreateMicroposts: migrated (0.0019s) ===========
config/routes.rbを開いてみると
$ cat config/routes.rb
Rails.application.routes.draw do
resources :microposts ← 追加されている
resources :users
root ‘users#index’
end
また、app/controllers/microposts_controller.rbも追加されているので、ブラウザに http://localhost:3000/microposts/newと入力しマイクロポストを新規に作って見る
そしてCreate Micropostをクリックし、作成すると
と、表示されるので、userの時と同じようにいくつか作って、index,show destoryなどをやってみる。
異なるデータモデル同士の関連付けをやっていくが、userは複数のmicropostを持てるし、micorpostはuserが持っているので
$ gedit app/models/user.rb
class User < ApplicationRecord
has_many :microposts
end
$ gedit app/models/micropost.rb
class Micropost < ApplicationRecord
belongs_to :user
style=”color: #ff6600;”>end
また、これまではデーターベースに入力されるデーターの検証を一切やってないので、制限や検証をやっていく。先ずはマイクロポストの最大文字数を140文字に制限する
$ gedit app/models/micropost.rb
class Micropost < ApplicationRecord
validates :content, length: { maximum: 140 }
end
そして、micropostに140文字以上を入力してどうなるか試す。
141文字入れるとエラーになる(この文字数は全角でも141文字の様だ、全角1文字はやはり1文字と数える)
次はuser,emailを空白にしたらエラーを出す
$ gedit app/models/user.rb
class User < ApplicationRecord
has_many :microposts
validates :name, presence: true
validates :email, presence: true
end
そして、ブラウザにuser, micropostを空欄にしてCreate Userをクリックすると
とエラーが表示される
そしてgitにコミット
$ git status
On branch main
Changes not staged for commit:
(use “git add <file>…” to update what will be committed)
(use “git restore <file>…” to discard changes in working directory)
modified: config/routes.rb
後略
$ git add -A
$ git commit -m “Finish toy app”
[main e33fc8d] Finish toy app
36 files changed, 589 insertions(+), 1 deletion(-)
create mode 100644 app/controllers/microposts_controller.rb
create mode 100644 app/controllers/users_controller.rb
create mode 100644 app/helpers/microposts_helper.rb