LoginSignup
0
0

More than 3 years have passed since last update.

Rails Tutorial 第2章学習編

Last updated at Posted at 2020-10-23

Rails Tutorial 第2章で(。´・ω・)ん?って思ったところ

演習
CSSを知っている読者へ: 新しいユーザーを作成し、ブラウザのHTMLインスペクター機能を使って「User was successfully created.」の箇所を調べてみてください。ブラウザをリロードすると、その箇所はどうなるでしょうか?

Google Chrome Shift+Ctrl+I or (F12) or 右クリックした中にある検証をクリック
image.png
HTML・CSSコードが見れます、
この機能を使って「User was successfully created.」を調べろって事だと思います('ω')ノ
もう少し詳しく知りたい方は⇒こちらをどうぞ

簡単な内容のおさらい。

ユーザー登録機能を作る

魔法のコマンド 『 Rails g scaffold 』( scaffoldは日本語で足場という意味 )  

$ rails generate scaffold User name:string email:string
$ rails db:migrate

このたった2つコマンドを叩くだけでこんなページが出来上がる。
ユーザー登録が出来る・・・もはや魔法の領域。
image.png

Scaffoldの欠点

  • データ検証がない。(空欄・でたらめなアドレスでも登録できちゃう)
  • ユーザー認証がない。(ログイン・ログアウト機能はない。誰でもユーザーページにアクセスできちゃう)
  • レイアウトやスタイルが整っていない。
  • テストが書かれていない。
  • 理解が困難。
投稿機能を作る
$ rails generate scaffold Micropost content:text user_id:integer
$ rails db:migrate

先ほどと同じく2つコマンドを叩くだけとはいかない。
※ルーティングを追加する必要がある。

ruby config/routes.rb
Rails.application.routes.draw do
  resources :microposts # ←これを追加するとurl/micropostで投稿ページにアクセスできる
  resources :users
  root 'users#index'
end
models/micropost.rbにvalidatesを追加する事で検証機能を実装できる
ruby app/models/micropost.rb
class Micropost < ApplicationRecord
  validates :name, length: { maximum: 140 } #入力できる文字列は140文字まで
                   presence: true #文字列が入力されている事を確認する
end
異なるデータモデル同士の関連付ける
ruby app/models/user.rb
class User < ApplicationRecord
#ユーザーはマイクロポストを沢山持ってるのでhas many :micropostを追加
  has_many :microposts
end
ruby app/models/micropost.rb
class Micropost < ApplicationRecord
#マイクロポストはユーザーに紐づいているのでbelongs_to :userを追加
  belongs_to :user
  validates :content, length: { maximum: 140 }
end

これでRDBの関連付けが完了する。わ~い簡単( *´艸`)

Rails Console (Railsアプリを対話的に操作できる便利ツール)
# Rails コンソール
$ rails c
>> #ここにRubyコード記述をすると実行してくれる

>> first_user = User.first # Userテーブルからidが1のユーザーを変数first_userに格納

コマンドの処理内容
User.first
↓ (自動的にデータベースを操作するSQLコマンドに変換される。)
User Load (0.2ms)  SELECT "users".* FROM "users" ORDER BY "users"."id" ASC
  LIMIT ?  [["LIMIT", 1]]
↓ SQLの実行結果
 => #<User id: 1, name: "Michael Hartl", email: "michael@example.org",
 created_at: "2020-10-23 00:39:14", updated_at: "2020-10-23 00:41:24">
↓ 
SQLの実行結果をfirst_userに格納

>> first_user.microposts #先ほどのユーザーが投稿したmicropostを全部取り出す。
Micropost Load (3.2ms)  SELECT "microposts".* FROM "microposts" WHERE
  "microposts"."user_id" = ? LIMIT ?  [["user_id", 1], ["LIMIT", 11]]
 => #<ActiveRecord::Associations::CollectionProxy [#<Micropost id: 1, content:
 "First micropost!", user_id: 1, created_at: "2020-10-23 02:04:13", updated_at:
 "2020-10-23 02:04:13">, #<Micropost id: 2, content: "Second micropost",
 user_id: 1, created_at: "2020-10-23 02:04:30", updated_at: "2020-10-23
 02:04:30">]>

>> micropost = first_user.microposts.first #first_userの1番目の投稿を変数micropostに格納

感想

この章はあまり躓かなかったです。('ω')ノ
git&herokuの便利さに惚れ惚れしてきました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0