SlideShare a Scribd company logo
Rails基礎講座
  2012/03/21
前回のあらすじ

• Ruby on Rails
• Rubyをインストールしてみる
• Rubyの基礎
おさらい

• Railsとは?
• MVCアーキテクチャ
• 変数・条件分岐・ループ
• レシーバとメソッドとメソッド定義
MVC?
MVC?
Model
MVC?
       Model


View
MVC?
       Model


View           Controller
MVC?
       Model


View           Controller


       User
MVC?
       Model


View           Controller


       User
MVC?
       Model


View           Controller


       User
MVC?
       Model


View           Controller


       User
MVC?
       Model


View           Controller


       User
MVC?
       Model


View           Controller


       User
MVC?
       Model


View           Controller


       User
Railsの特長

• ルールに沿って書いていけばWebアプ
 リケーションができる

• =レールに乗る(on Rails)
Railsの特長
インストール
インストール
インストール
インストール
> gem install rails
インストール
> gem install rails

Fetching: i18n-0.6.0.gem (100%)
Fetching: multi_json-1.1.0.gem (100%)
Fetching: activesupport-3.2.2.gem (100%)
...
Successfully installed bundler-1.1.1
Successfully installed rails-3.2.2
30 gems installed
インストール
インストール
> rails -v
インストール
> rails -v

Rails 3.2.2
何を作る?
何を作る?
何を作る?



 twit
何を作る?



    twit
マイクロブログ的なアレ
何を作る?



 twit
何を作る?



       twit
[名]
1 ((略式))ばか, まぬけ.
2 あざけり, 愚弄(ぐろう).
必要なもの
必要なもの
• 統合開発環境
• エディタ
• ターミナル
• ブラウザ
※画面は開発中のものです
※画面は開発中のものです



         ターミナル
※画面は開発中のものです



         ターミナル
※画面は開発中のものです


エディタ
         ターミナル
※画面は開発中のものです


エディタ
         ターミナル
※画面は開発中のものです


エディタ
              ターミナル




       ブラウザ
完成品
完成品
https://github.com/nysalor/twit/commits/master
完成品
https://github.com/nysalor/twit/commits/master
完成品
https://github.com/nysalor/twit/commits/master




     下から順番
完成品
https://github.com/nysalor/twit/commits/master




     下から順番
開発開始!
開発開始!
> rails new twit -T
開発開始!
> rails new twit -T

create
create README.rdoc
...
run bundle install
...
Your bundle is complete! Use `bundle
show [gemname]` to see where a
bundled gem is installed.
ディレクトリ
ディレクトリ
 Model
ディレクトリ
       Model


View
ディレクトリ
       Model


View           Controller
ディレクトリ
       Model


               Controller


View
ディレクトリ
             Model


Controller


  View
ディレクトリ
  Model


Controller


  View
ディレクトリ
  Model


Controller


  View
ディレクトリ
          > cd twit
  Model


Controller


  View
ディレクトリ
  Model


Controller


  View
ディレクトリ
             twit/
  Model


Controller


  View
ディレクトリ
             twit/
  Model              app/models



Controller


  View
ディレクトリ
             twit/
  Model               app/models



Controller           app/controllers



  View
ディレクトリ
             twit/
  Model               app/models



Controller           app/controllers



  View                 app/views
ディレクトリ
             twit/
                      app/models



Controller           app/controllers



  View                 app/views
ディレクトリ
       twit/
                app/models



               app/controllers



View             app/views
ディレクトリ
 twit/
          app/models



         app/controllers



           app/views
ディレクトリ
 twit/
          app/models



         app/controllers



           app/views
ディレクトリ
        twit/
config            app/models



                app/controllers



                  app/views
ディレクトリ
        twit/
config            app/models



 db             app/controllers



                  app/views
ディレクトリ
         twit/
config             app/models



 db              app/controllers



public             app/views
ディレクトリ
 twit/
ディレクトリ
      twit/

以後はずっとこのディレクトリ
サーバ起動
サーバ起動
> cd twit
> rails server
サーバ起動
> cd twit
> rails server

http://localhost:3000
サーバ起動


http://localhost:3000
サーバ起動
サーバ起動
設計
設計
Model
設計
設計
User
設計
User




Tweet
設計
User
        name



Tweet
設計
User
        name



Tweet
         body
        user_id
設計
User
       name




        body
       user_id
設計
User
       name
scaffold
scaffold
> rails generate scaffold User name:string
scaffold
> rails generate scaffold User name:string

invoke active_record
create db/migrate/
 20120320181856_create_users.rb
create app/models/user.rb
...
create app/assets/stylesheets/
scaffolds.css.scss
scaffold
  Model


Controller


  View
scaffold
  Model           app/models/user.rb



Controller


  View
scaffold
  Model           app/models/user.rb


                   app/controllers/
Controller        users_controller.rb



  View
scaffold
  Model           app/models/user.rb


                   app/controllers/
Controller        users_controller.rb


                   app/views/users/
  View             index.html.erb ...
scaffold
scaffold
         db/migrate/
20120320181856_create_users.rb
scaffold
            db/migrate/
   20120320181856_create_users.rb
class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name

      t.timestamps
    end
  end
end
scaffold
            db/migrate/
   20120320181856_create_users.rb
class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name

      t.timestamps          DBの「手順書」
    end
  end
end
設計
User
        name



Tweet
         body
        user_id
設計

        name



Tweet
         body
        user_id
設計



Tweet
         body
        user_id
scaffold
Rails基礎講座 part.2
scaffold
scaffold
> rails generate model Tweet body:string
user_id:integer
scaffold
> rails generate model Tweet body:string
user_id:integer

invoke active_record
create db/migrate/
 20120320213424_create_tweets.rb
create app/models/tweet.rb
model generator
Model
model generator
Model   app/models/tweet.rb
model generator
model generator
          db/migrate/
20120320213424_create_tweets.rb
model generator
             db/migrate/
   20120320213424_create_tweets.rb
class CreateTweets < ActiveRecord::Migration
  def change
    create_table :tweets do |t|
      t.string :body
      t.integer :user_id

      t.timestamps
    end
  end
end
model generator
             db/migrate/
   20120320213424_create_tweets.rb
class CreateTweets < ActiveRecord::Migration
  def change
    create_table :tweets do |t|
      t.string :body
      t.integer :user_id

      t.timestamps          DBの「手順書」
    end
  end
end
migrate
migrate
> rake db:migrate
migrate
> rake db:migrate

== CreateUsers: migrating ================
-- create_table(:users)
   -> 0.0016s
== CreateUsers: migrated (0.0017s) =========

== CreateTweets: migrating ===============
-- create_table(:tweets)
   -> 0.0023s
== CreateTweets: migrated (0.0025s) ========
migrate
> rake db:migrate
                        「手順書」からDBを作成
== CreateUsers: migrating ================
-- create_table(:users)
   -> 0.0016s
== CreateUsers: migrated (0.0017s) =========

== CreateTweets: migrating ===============
-- create_table(:tweets)
   -> 0.0023s
== CreateTweets: migrated (0.0025s) ========
動かしてみる
動かしてみる
http://localhost:3000/users/
動かしてみる
http://localhost:3000/users/
動かしてみる
http://localhost:3000/users/
動かしてみる
http://localhost:3000/users/
設計
User
        name



Tweet
         body
        user_id
設計
User
       name




        body
       user_id
設計
User
       name
設計
User
設計
User
設計
        User




Tweet
設計
        User




Tweet
設計
        User




Tweet   Tweet
設計
        User




Tweet   Tweet
設計
        User




Tweet   Tweet   Tweet
設計
        User




Tweet   Tweet   Tweet
関連付け
関連付け
app/models/user.rb
関連付け
            app/models/user.rb



class User < ActiveRecord::Base
end
関連付け
app/models/user.rb
関連付け
            app/models/user.rb



class User < ActiveRecord::Base
  has_many :tweets
end
関連付け
            app/models/user.rb



class User < ActiveRecord::Base
  has_many :tweets
end
                      追加
関連付け
関連付け
app/models/tweet.rb
関連付け
           app/models/tweet.rb



class Tweet < ActiveRecord::Base
end
関連付け
app/models/tweet.rb
関連付け
           app/models/tweet.rb



class Tweet < ActiveRecord::Base
  belongs_to :user
end
関連付け
           app/models/tweet.rb



class Tweet < ActiveRecord::Base
  belongs_to :user
end
                      追加
つぶやきを表示
つぶやきを表示
http://localhost:3000/users/1
つぶやきを表示
http://localhost:3000/users/1
つぶやきを表示
http://localhost:3000/users/1



          この辺につぶやき追加
つぶやきを表示
つぶやきを表示
  Controller
つぶやきを表示
つぶやきを表示
app/controllers/users_controller.rb
つぶやきを表示
   app/controllers/users_controller.rb

  # GET /users/1
  # GET /users/1.json
  def show
    @user = User.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @user }
    end
  end
つぶやきを表示
          app/controllers/users_controller.rb

        # GET /users/1
        # GET /users/1.json
        def show
          @user = User.find(params[:id])
showアクション=users/1
          respond_to do |format|
            format.html # show.html.erb
            format.json { render json: @user }
          end
        end
つぶやきを表示
   app/controllers/users_controller.rb

  # GET /users/1
  # GET /users/1.json
  def show
    @user = User.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @user }
    end
  end
つぶやきを表示
app/controllers/users_controller.rb
つぶやきを表示
   app/controllers/users_controller.rb

  # GET /users/1
  # GET /users/1.json
  def show
    @user = User.find(params[:id])
    @tweets = @user.tweets

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @user }
    end
  end
つぶやきを表示
   app/controllers/users_controller.rb

  # GET /users/1
  # GET /users/1.json
  def show
    @user = User.find(params[:id])
    @tweets = @user.tweets
                                追加
    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @user }
    end
  end
つぶやきを表示
   app/controllers/users_controller.rb

  # GET /users/1
  # GET /users/1.json        @user.tweetsで@userのtweetを取得
  def show
    @user = User.find(params[:id])
    @tweets = @user.tweets
                                     追加
    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @user }
    end
  end
つぶやきを表示
つぶやきを表示
  View
つぶやきを表示
つぶやきを表示
app/views/users/show.html.erb
つぶやきを表示
      app/views/users/show.html.erb


<p id="notice"><%= notice %></p>

<p>
  <b>Name:</b>
  <%= @user.name %>
</p>
つぶやきを表示
app/views/users/show.html.erb
つぶやきを表示
      app/views/users/show.html.erb

<p>
  <b>Name:</b>
  <%= @user.name %>
</p>
<p>
  <b><%= @user.name %>さんのつぶやき</b>
  <ul>
    <% @tweets.each do |tweet| -%>
      <li><%= tweet.body %></li>
    <% end -%>
  </ul>
</p>
つぶやきを表示
      app/views/users/show.html.erb

<p>
  <b>Name:</b>
  <%= @user.name %>
</p>
<p>
  <b><%= @user.name %>さんのつぶやき</b>
  <ul>
    <% @tweets.each do |tweet| -%>
      <li><%= tweet.body %></li>
    <% end -%>                       追加
  </ul>
</p>
つぶやきを表示
つぶやきを表示
http://localhost:3000/users/1
つぶやきを表示
http://localhost:3000/users/1
つぶやく
つぶやく
Controller
つぶやく
つぶやく
app/controllers/users_controller.rb
つぶやく
   app/controllers/users_controller.rb



    respond_to do |format|
      format.html { redirect_to users_url }
      format.json { head :no_content }
    end
  end
end
つぶやく
   app/controllers/users_controller.rb



    respond_to do |format|
      format.html { redirect_to users_url }
      format.json { head :no_content }
    end
  end
end   末尾のendの前に新しいメソッドを追加
つぶやく
   app/controllers/users_controller.rb



    respond_to do |format|
      format.html { redirect_to users_url }
      format.json { head :no_content }
    end
  end
end
つぶやく
app/controllers/users_controller.rb
つぶやく
    app/controllers/users_controller.rb

    respond_to do |format|
      format.html { redirect_to users_url }
      format.json { head :no_content }
    end
  end

  # POST /users/1/tweet
  def tweet
    @user = User.find(params[:id])
    @tweet = @user.tweets.create(:body => params[:body])

    redirect_to @user, notice: 'Tweet was successfully updated.'
  end
end
つぶやく
    app/controllers/users_controller.rb

    respond_to do |format|
      format.html { redirect_to users_url }
      format.json { head :no_content }
    end
  end

  # POST /users/1/tweet
  def tweet
    @user = User.find(params[:id])
    @tweet = @user.tweets.create(:body => params[:body])

    redirect_to @user, notice: 'Tweet was successfully updated.'
  end
end
                                       追加
つぶやく
    app/controllers/users_controller.rb

    respond_to do |format|
      format.html { redirect_to users_url }
      format.json { head :no_content }
    end
  end

  # POST /users/1/tweet                   @user.tweets.createでtweetを追加
  def tweet
    @user = User.find(params[:id])
    @tweet = @user.tweets.create(:body => params[:body])

    redirect_to @user, notice: 'Tweet was successfully updated.'
  end
end
                                       追加
つぶやく
つぶやく
 View
つぶやく
つぶやく
app/views/users/show.html.erb
つぶやく
      app/views/users/show.html.erb




<%= link_to 'Edit', edit_user_path(@user) %> |
<%= link_to 'Back', users_path %>
つぶやく
app/views/users/show.html.erb
つぶやく
      app/views/users/show.html.erb


<p>
  <%= form_tag user_tweet_path do %>
    今何してる?:<%= text_field_tag :body %>
    <%= submit_tag %>
  <% end -%>
</p>

<%= link_to 'Edit', edit_user_path(@user) %> |
<%= link_to 'Back', users_path %>
つぶやく
      app/views/users/show.html.erb


<p>
  <%= form_tag user_tweet_path do %>
    今何してる?:<%= text_field_tag :body %>
    <%= submit_tag %>
                                             追加
  <% end -%>
</p>

<%= link_to 'Edit', edit_user_path(@user) %> |
<%= link_to 'Back', users_path %>
つぶやく
つぶやく
config/routes.rb
つぶやく
              config/routes.rb




Twit::Application.routes.draw do
  resources :users
つぶやく
config/routes.rb
つぶやく
                     config/routes.rb




Twit::Application.routes.draw do
  match '/user/:id/tweet' => 'users#tweet', :as => :user_tweet

  resources :users
つぶやく
                     config/routes.rb




Twit::Application.routes.draw do
  match '/user/:id/tweet' => 'users#tweet', :as => :user_tweet

  resources :users
                                                                 追加
つぶやく
                        config/routes.rb


/user/1/tweetでusers#tweetが呼ばれるようになる


   Twit::Application.routes.draw do
     match '/user/:id/tweet' => 'users#tweet', :as => :user_tweet

     resources :users
                                                                    追加
つぶやいてみる
つぶやいてみる
http://localhost:3000/users/1
つぶやいてみる
http://localhost:3000/users/1
つぶやいてみる
http://localhost:3000/users/1
トップページ
トップページ
http://localhost:3000/
トップページ
http://localhost:3000/
トップページ
http://localhost:3000/
トップページ
http://localhost:3000/
トップページ
トップページ
 config/routes.rb
トップページ
                     config/routes.rb



Twit::Application.routes.draw do
  match '/user/:id/tweet' => 'users#tweet', :as => :user_tweet

  resources :users
トップページ
 config/routes.rb
トップページ
                     config/routes.rb



Twit::Application.routes.draw do
  match '/user/:id/tweet' => 'users#tweet', :as => :user_tweet

  resources :users

  root :to => "users#index"
トップページ
                     config/routes.rb



Twit::Application.routes.draw do
  match '/user/:id/tweet' => 'users#tweet', :as => :user_tweet

  resources :users

  root :to => "users#index"


                                  追加
トップページ
トップページ
http://localhost:3000/
トップページ
http://localhost:3000/
トップページ
http://localhost:3000/




???
トップページ
トップページ
 public/index.html
トップページ
      削除
 public/index.html
トップページ
トップページ
http://localhost:3000/
トップページ
http://localhost:3000/
次回予告
• トップページにタイムライン表示
• つぶやきを新しい順に並べる
• デザインをかっこよく
• Ajaxで動きのあるページに
• 多分時間が足りません
ご清聴ありがとうございました

More Related Content

What's hot (8)

PDF
Start React with Browserify
Muyuu Fujita
 
PDF
WKWebViewとUIWebView
Yuki Hirai
 
PDF
laravel x モバイルアプリ
Masaki Oshikawa
 
PDF
React.jsでクライアントサイドなWebアプリ入門
spring_raining
 
PDF
Vue Router + Vuex
Kei Yagi
 
PDF
React+TypeScriptもいいぞ
Mitsuru Ogawa
 
PPTX
20200304 vuejs
yamamotomsc
 
PDF
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
miso- soup3
 
Start React with Browserify
Muyuu Fujita
 
WKWebViewとUIWebView
Yuki Hirai
 
laravel x モバイルアプリ
Masaki Oshikawa
 
React.jsでクライアントサイドなWebアプリ入門
spring_raining
 
Vue Router + Vuex
Kei Yagi
 
React+TypeScriptもいいぞ
Mitsuru Ogawa
 
20200304 vuejs
yamamotomsc
 
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
miso- soup3
 

Viewers also liked (8)

PPT
社内LT資料
Jun Yokoyama
 
KEY
Real world rails
Jun Yokoyama
 
KEY
Ruby on
Jun Yokoyama
 
KEY
Rails基礎講座 part.1
Jun Yokoyama
 
KEY
First Step TDD
Jun Yokoyama
 
KEY
Ruby with Hash
Jun Yokoyama
 
KEY
Active support事始め
Jun Yokoyama
 
PDF
5 Tips for a Successful Social Media Strategy
Wine Glass Marketing
 
社内LT資料
Jun Yokoyama
 
Real world rails
Jun Yokoyama
 
Ruby on
Jun Yokoyama
 
Rails基礎講座 part.1
Jun Yokoyama
 
First Step TDD
Jun Yokoyama
 
Ruby with Hash
Jun Yokoyama
 
Active support事始め
Jun Yokoyama
 
5 Tips for a Successful Social Media Strategy
Wine Glass Marketing
 
Ad

Similar to Rails基礎講座 part.2 (20)

PDF
Rails初心者レッスン lesson2 3edition
Satomi Tsujita
 
KEY
Rails and twitter #twtr_hack
i7a
 
PPTX
Tech fun rails_workshop
OMEGA (@equal_001)
 
PDF
Rails3.1rc4を試してみた
Takahiro Hidaka
 
PDF
Rails初心者レッスン lesson1 3rd edition
Goh Matsumoto
 
PDF
nomlab_okayamaruby_slide
nomlab
 
PDF
Ruby on Rails Tutorial
Ken Iiboshi
 
PDF
Rails Controller Fundamentals
Takashi SAKAGUCHI
 
PDF
Railsの基礎
Junya Ishihara
 
PDF
はじめての Rails アプリ開発
n-fukidome
 
PDF
Next-L Enju 開発WS #03 Ruby on Railsの使い方
Kosuke Tanabe
 
PPT
Ruby on Rails Tutorial Chapter8-10
Sea Mountain
 
KEY
Twitterのフォロワの増減がわたし…、 気になります! (OSC 2012 広島, Hiroshima.rb)
Yukinori KITADAI
 
PPT
Ruby on Rails3 Tutorial Chapter2
Sea Mountain
 
PDF
Rails初心者レッスン lesson3 3edition
Satomi Tsujita
 
PDF
The Essence of Using Ruby on Rails in Corporations
Koichiro Ohba
 
PDF
Ruby on Rails Overview
Koki Shimizu
 
PPTX
WebAppDev勉強会 #4
Kohei Noda
 
PDF
Sinatraでwebアプリケーション開発を学ぶ
Hiroshi Oyamada
 
PDF
Rails初心者レッスン lesson4 2edition
Satomi Tsujita
 
Rails初心者レッスン lesson2 3edition
Satomi Tsujita
 
Rails and twitter #twtr_hack
i7a
 
Tech fun rails_workshop
OMEGA (@equal_001)
 
Rails3.1rc4を試してみた
Takahiro Hidaka
 
Rails初心者レッスン lesson1 3rd edition
Goh Matsumoto
 
nomlab_okayamaruby_slide
nomlab
 
Ruby on Rails Tutorial
Ken Iiboshi
 
Rails Controller Fundamentals
Takashi SAKAGUCHI
 
Railsの基礎
Junya Ishihara
 
はじめての Rails アプリ開発
n-fukidome
 
Next-L Enju 開発WS #03 Ruby on Railsの使い方
Kosuke Tanabe
 
Ruby on Rails Tutorial Chapter8-10
Sea Mountain
 
Twitterのフォロワの増減がわたし…、 気になります! (OSC 2012 広島, Hiroshima.rb)
Yukinori KITADAI
 
Ruby on Rails3 Tutorial Chapter2
Sea Mountain
 
Rails初心者レッスン lesson3 3edition
Satomi Tsujita
 
The Essence of Using Ruby on Rails in Corporations
Koichiro Ohba
 
Ruby on Rails Overview
Koki Shimizu
 
WebAppDev勉強会 #4
Kohei Noda
 
Sinatraでwebアプリケーション開発を学ぶ
Hiroshi Oyamada
 
Rails初心者レッスン lesson4 2edition
Satomi Tsujita
 
Ad

Rails基礎講座 part.2

Editor's Notes