#デモアプリの作成
####アプリケーションの骨組みを作る
$ cd ~/environment
$ rails _6.0.3_ new toy_app
$ cd toy_app/
###gemの書き換え
内容は前回と一緒
そしてインストール
$ bundle install --without production
###gitの管理下に置く
$ git init
$ git add -A
$ git commit -m "Initialize repository"
###git hubに新しいリポジトリを追加する
前回と同じ手順で作成
そしてリモートリポジトリにプッシュを忘れずに
$ git remote add origin https://github.com/<あなたのGitHubアカウント名>/toy_app.git
$ git push -u origin master
###前回のHello world同様にデプロイの準備をする
まずコントローラーの設定から
class ApplicationController < ActionController::Base
def hello
render html: "hello, world!"
end
end
そしてルーティングの設定
Rails.application.routes.draw do
root 'application#hello'
end
そして変更をコミットしてherokuへプッシュ
$ git commit -am "Add hello"
$ heroku create
$ git push && git push heroku master
#↑gitのリポジトリとherokuを同期している
##usersモデル
users | |
---|---|
id | integer |
name | string |
string |
##micro postモデルの設計
micropost | |
---|---|
id | integer |
content | text |
user_id | integer |
↑のデータモデルを実装
↓
$ rails generate scaffold User name:string email:string
#name:string email:stringを追加することでモデル内容が上記のusersモデルのようになる
ここのUsersリソースはすべてのRailsプロジェクトに標準装備されているscaffoldジェネレータで生成します.
そして
$ rails db:migrate
でデータベースを更新してusersモデルを作成する
そして前章同じく
# Cloud9 への接続を許可する
config.hosts.clear
そしてrails server起動
しかし問題発生
hello worldが表示されない。
解決策
・更新したファイルに上書き保存を実行
・refresh file treeを実行
しかしうまくいかず。
そこで重大な落とし穴に気が付いた。
$ cd ~/environment/toy_app/
指定するの忘れてたTT
原因がわかったということで無事起動。
問題解決。
##ユーザーページを動かしてみる
urlに/usersと入力
##2.2.1演習
1、消える
2、作成されてしまう
3、間違っているのにも関わらず更新されてしまう
4、User was successfully destroyed.と表示する
##MVCの挙動
rails チュートリアルから引用(https://railstutorial.jp/chapters/toy_app?version=6.0#cha-a_toy_app)
1.ブラウザから「/users」というURLのリクエストをRailsサーバーに送信する。
2.「/users」リクエストは、Railsのルーティング機構(ルーター)によってUsersコントローラ内のindexアクションに割り当てられる。
3.indexアクションが実行され、そこからUserモデルに、「すべてのユーザーを取り出せ」(User.all)と問い合わせる。
4.Userモデルは問い合わせを受け、すべてのユーザーをデータベースから取り出す。
5.データベースから取り出したユーザーの一覧をUserモデルからコントローラに返す。
6.sersコントローラは、ユーザーの一覧を@users変数(@はRubyのインスタンス変数を表す)に保存し、indexビューに渡す。
7.indexビューが起動し、ERB(Embedded RuBy: ビューのHTMLに埋め込まれているRubyコード)を実行して HTMLを生成(レンダリング)する。
8.コントローラは、ビューで生成されたHTMLを受け取り、ブラウザに返す 。
ユーザーからリクエストされたURLを、Usersリソースで使うコントローラのアクションに割り当てるためのコード
Rails.application.routes.draw do
resources :users
root 'application#hello'
end
##/にアクセスしたら/usersにアクセスするようにする
Rails.application.routes.draw do
resources :users
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
root 'application#hello'
end
を
Rails.application.routes.draw do
resources :users
root 'users#index'
end
に変更する
##indexアクション
class UsersController < ApplicationController
.
.
.
def index
@users = User.all
end
.
.
.
end
userモデルのすべてのユーザーを@users変数に保存
##@users変数
@記号で始まる変数をインスタンス変数とよぶ。
railsコントローラ内で宣言したインスタンス変数はビューでも使えるようになる
2、userコントローラーのprivateの場所にある
3、edit.html.erb
##このscaffoldで自動生成されたコードの問題点
1、適当なメールアドレスを打っても通ってしまう
2、ログインログアウトがない
3、テストがない
4、ダサい
##micropostリソースを追加
$ rails generate scaffold Micropost content:text user_id:integer
routesにルーティングルールを追加(自分で追加する)
Rails.application.routes.draw do
resources :microposts
resources :users
root 'users#index'
end
が使えるようになった
##演習
1、消える
2、作成されてしまう
3、作成されてしまう
##マイクロポストの文字数を制限する
class Micropost < ApplicationRecord
validates :content, length: { maximum: 140 }
end
##2.3.2演習
1、エラーが出るようになった
2、noticeが使われてない
##異なるデータモデルの関連付け
1人のユーザーに複数のマイクロポストがある。
class User < ApplicationRecord
has_many :microposts
end
1つのマイクロポストは1人のユーザーにのみ属する。
class Micropost < ApplicationRecord
belongs_to :user
validates :content, length: { maximum: 140 }
end
引用
https://railstutorial.jp/chapters/toy_app?version=6.0#cha-a_toy_app
2.3.3
##2.3.3演習
1.
<p>
<strong>Micropost:</strong>
<%= @user.microposts.first.content %>
</p>
##モデル、コントローラー継承
userモデル、micropostモデルはそれぞれapplicationモデルを継承していてapplicationモデルはActiveRecord::Baseを継承している
userモデル、micropostモデルはそれぞれapplicationコントローラーを継承していて、applicationコントローラーはActionController::Baseを継承している