0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rails チュートリアル 2章

Last updated at Posted at 2021-03-31

#デモアプリの作成

####アプリケーションの骨組みを作る

$ 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同様にデプロイの準備をする
まずコントローラーの設定から

app/controllers/application_controller.rb
class ApplicationController < ActionController::Base

  def hello
    render html: "hello, world!"
  end
end

そしてルーティングの設定

config/routes.rb
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
email 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モデルを作成する

そして前章同じく

config/environments/development.rb
 # Cloud9 への接続を許可する
  config.hosts.clear

そしてrails server起動

しかし問題発生

スクリーンショット 2021-02-18 063320.png

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リソースで使うコントローラのアクションに割り当てるためのコード

config/routes.rb
Rails.application.routes.draw do
  resources :users
  root 'application#hello'
end

##/にアクセスしたら/usersにアクセスするようにする

/toy_app/config/routes.rb
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

/toy_app/config/routes.rb
Rails.application.routes.draw do
  resources :users
  root 'users#index'
end

に変更する

##indexアクション

app/controllers/users_controller.rb
class UsersController < ApplicationController
  .
  .
  .
  def index
    @users = User.all
  end
  .
  .
  .
end

userモデルのすべてのユーザーを@users変数に保存

##@users変数
@記号で始まる変数をインスタンス変数とよぶ。
railsコントローラ内で宣言したインスタンス変数はビューでも使えるようになる

##2.2.2演習
1、無題.png

2、userコントローラーのprivateの場所にある

3、edit.html.erb

##このscaffoldで自動生成されたコードの問題点
1、適当なメールアドレスを打っても通ってしまう
2、ログインログアウトがない
3、テストがない
4、ダサい

##micropostリソースを追加

$ rails generate scaffold Micropost content:text user_id:integer

routesにルーティングルールを追加(自分で追加する)

config/routes.rb
Rails.application.routes.draw do
  resources :microposts
  resources :users
  root 'users#index'
end

ルーティングルールを追加したことにより
スクリーンショット 2021-02-23 014623.png

が使えるようになった

##演習
1、消える
2、作成されてしまう
3、作成されてしまう

##マイクロポストの文字数を制限する

app/models/micropost.rb
class Micropost < ApplicationRecord
  validates :content, length: { maximum: 140 }
end

##2.3.2演習

1、エラーが出るようになった
2、noticeが使われてない

##異なるデータモデルの関連付け

1人のユーザーに複数のマイクロポストがある。

app/models/user.rb
class User < ApplicationRecord
  has_many :microposts
end

1つのマイクロポストは1人のユーザーにのみ属する。

app/models/micropost.rb
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を継承している

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?