Ruby on Rails5 道場コース I

2. アプリケーションを用意しよう
railsでアプリケーションを作成するコマンドは rails new アプリケーション名 です。
サーバーを起動するためには、 rails server コマンドを実行してください。

rails new tweet_app
rails server

3. トップページを作ろう
railsで新規ページの作成を作成するときは
rails generate controller コントローラ名 アクション名 を実行します。

■ ターミナルで以下のコマンドを実行してください
rails g controller home top

4. URLを変更しよう
「localhost:3000」にアクセスしたときにトップページが表示されるようにしてください。
ヒント
ヒント
localhost:3000 にアクセスしたときにトップページが表示されるようにしたい場合は、ルーティングのURLの部分を/とします。

Rails.application.routes.draw do
get “/” => “home#top”

end

5. サービス紹介ページを作ろう
Rails.application.routes.draw do
get “/” => “home#top”
get “about” => “home#about”
end

class HomeController < ApplicationController def top end def about end end about.html.erb

TweetAppとは

SNSサービスです。
近況やつぶやきを投稿し、他のユーザーと楽しくコミュニケーションできます。

6. ヘッダーを作ろう
ここでは、トップページとサービス紹介ページの両方にヘッダーを追加し、それぞれのページへのリンクを作成していきます。
まずは、ヘッダーを追加しましょう。

ヒント
共通部分を追加する場所は
views/layouts/application.html.erb
にあります

トップページとサービス紹介ページの両方で、
・「TweetApp」の部分をトップページへのリンクにしてください。
・「TweetAppとは」の部分をサービス紹介ページへのリンクにしてください。
ヒント
ヒント
link_to メソッドは以下のように記述します
<%= link_to("リンクタイトル", "URL") %>

application.html.erb

  • <%= link_to("TweetAppとは", "/about") %>

<%= yield %>

7. モデルとテーブルを作ろう
ここでは、投稿機能を追加するために、Postモデルとpostsテーブルを作成していきます。
コマンドを用いて、Postモデルとpostsテーブルを作成し、データベースに変更を反映してください。
※ ただし、postsテーブルには、text型のcontentカラムを持たせてください。

ヒント
以下のコマンドで、モデルとマイグレーションファイルを同時に作成することができます。
rails g model テーブル名(単数形) カラム名:データ型
マイグレーションファイルの内容をデータベースに反映させるためには、以下のコマンドを実行します。
rails db:migrate

Postモデルとpostsテーブルができたら、データベースに投稿データを保存してみましょう。
コンソールを用いて、好きな内容の投稿データをデータベースに保存してください。

ヒント
ターミナルで以下のコマンドを実行することで、コンソールを立ち上げることができます。
rails console
以下の方法で、テーブルにデータを保存することができます。
1. モデルのインスタンスを作成
2. saveメソッドを用いて、作成したインスタンスを保存
1. post = Post.new(引数)
2. post.save
データを追加し終わったら、 quit で終了しましょう。
データベースタブを開き、コンソールで入力した投稿データが保存されているか、確認してみましょう。

rails g model Post content:text
rails db:migrate

8. 投稿一覧ページを作ろう
https://prog-8.com/rails5/study/2/2#

「localhost:3000/posts/index」にアクセスした時に見本のような投稿一覧ページが表示されるようにしてください。
ヒント
データベースのデータを全て取得するためにはallメソッドを使います。
モデル名.all
例) Post.all
取得したデータの順番を設定するには、 order メソッドを追加します。
orderメソッドの引数はキーワード引数として指定します。
引数名には基準となるカラム名を指定し、値に :asc (昇順)または :desc (降順)を指定します。
order(カラム名: :値)

投稿一覧ページへのリンクを作成しましょう。
ヘッダーから投稿一覧ページにアクセスできるように、リンクを追加してください。

routes.rb
get “posts/index” => “posts#index”

posts_controller.rb
class PostsController < ApplicationController def index @posts = Post.all.order(created_at: :desc) end end index.html.erb

<% @posts.each do |post| %>

<%= post.content %>

<% end %>

application.html.erb

  • <%= link_to("TweetAppとは", "/about") %>
  • <%= link_to("投稿一覧", "/posts/index") %>

9. 投稿詳細ページを作ろう
https://prog-8.com/rails5/study/3/4#/9
https://prog-8.com/rails5/study/3/6#/14
https://prog-8.com/rails5/study/3/7#/16

・投稿詳細ページの中で、投稿の内容と投稿の作成時刻を表示してください。
※ 注意点
・ルーティングを書く順番に気をつけましょう。
ヒント
ヒント
「/posts/1」,「/posts/2」のように異なるURLを1つのルーティングで定義するためには、posts/:idのようにします。
カラム名を使って、データを取得するためにはfind_byメソッドを使います。引数は、newメソッドの引数のようにハッシュで指定します。
find_by(カラム名: 値)
変数paramsはハッシュと同じ形式をしており、キーで値を取得することができます。
params[:キー] => 値

最後に、投稿詳細ページへのリンクを作成しましょう。
投稿一覧に表示されている投稿の部分を、投稿詳細ページへのリンクにしてください。

routes.rb
Rails.application.routes.draw do
get “posts/index” => “posts#index”
get “posts/:id” => “posts#show”

posts_controller.rb
class PostsController < ApplicationController def index @posts = Post.all.order(created_at: :desc) end def show @post = Post.find_by(id: params[:id]) end end show.html.erb

<%= @post.content %>

<%= @post.created_at %>

index.html.erb

<% @posts.each do |post| %>

<%= link_to(post.content, "/posts/#{post.id}") %>

<% end %>

シェアする

  • このエントリーをはてなブックマークに追加

フォローする