チュートリアルとしてブログアプリ(1)

さて前回までで開発環境が整ったはずですので、サンプルを制作してみましょう。今回は、ブログ一覧と単一のページを表示するアプリをつくってみます。
対象データになります。

id           -- id
title        -- タイトル
body         -- 本文
created_at   -- 作成日
updated_at   -- 最終更新日

このチュートリアル、もしかしたらどこかで見たことなるなという方もいるかもしれませんが

Postsコントローラーの生成

以下のコマンドでPostsコントローラとアクションを定義・生成します。

$ rails generate controller コントーラー名 アクション名1 アクション名2 ....

http://guides.rubyonrails.org/routing.html#resource-routing-the-rails-default

postsコントローラ生成とindexアクション・showアクション
$ rails generate controller posts index show

どのようなファイルが生成されるかはコマンドのレスポンスでみることができます。postsコントローラとindex/showアクションに対応するビューが生成されているはずです。

app/controllers/posts_controller.rb  # postsコントローラ
app/views/posts/index.html.erb       # indexビュー
app/views/posts/show.html.erb        # showビュー

モデルの生成

rails generate model post title:string body:text created_at:datetime updated_at:datetime

こちらも、どのようなファイルが生成されるかはコマンドのレスポンスでみることができます。

db/migrate/yyyymmddhhmmss_create_posts.rb  # マイグレーションファイル (yyyymmddhhmmssは作成日時)
app/models/post.rb

上のマイグレーションファイルをもとにテーブルを作成します。

rake db:migrate

次に、テーブルに対してデータを挿入した場合は、seeds.rbを使用します。
以下のように定義して、rakeコマンドを実行します。

# db/seeds.rb
posts = Post.create([
    { title: 'The title',body: 'This is the post body.' }, 
    { title: 'A title once again',body: 'And the post body follows.' },
    { title: 'Title strikes back',body: 'This is really exciting! Not.' }
])
rake db:seed

RailsではデフォルトではSQLiteが使用されますので、実際にみてみます。

$ sqlite3 db/development.sqlite3
....
> select * from posts;

確認してもらうと分かると思いますが、先頭にidがオートインクリメントで追加されていると思います。また、「created_at」「updated_at」はそれぞれ「レコード作成日時」「レコード最終更新日時」になります。これらはRailsの規約になります。

動作させてみる

コントローラとビューを編集して一覧ページ(index)と単一ページ(show)を作成してみましょう。
さきほど、コントローラの生成時に以下のファイルが生成されたと思います。

一覧ページ

Postモデルから全てのレコードを取得し、全データを表示させます。

# app/controllers/posts_controller.rb
  def index
    @posts = Post.all    # Postモデルから全てのレコードを取得
  end
# app/views/posts/index.html.erb
<% @posts.each do |post| %>
  <%= post.id %><%= post.title %><%= post.body %>
  <%= post.created_at %><%= post.modified_at %>
<% end %>

単一ページ

Postモデルからpost_idのレコードを取得し、該当データを表示させます。

# app/controllers/posts_controller.rb
  def show
    @posts = Post.find( params[:post_id])    #Postモデルからpost_idのレコードを取得
  end
# app/views/posts/show.html.erb
  <%= @post.id %><%= @post.title %><%= @post.body %>
  <%= @post.created_at %><%= @post.modified_at %>

さてアクセスしてみましょう。RailsのURLは以下のように
/コントローラ/アクション/[パラメーター]
になります。

http://(サーバIPアドレス):3000/posts/index     postsコントローラindexアクション
http://(サーバIPアドレス):3000/posts/show/[id] postsコントローラshowアクション

ルーティング

おそらく、indexアクションは表示されたと思いますが、showアクションはエラーになったと思います。

No route matches [GET] "/posts/show/3"

"/posts/show/3"にマッチするルートがないと言われています。

このルートを記述するのがコントローラ生成時に同時に生成されたconfig/routes.rbになります。
簡単にいうと、「このアドレスのときはこの処理を行いなさい」という命令を記述します。
中身を見てもらうと分かると思いますが、以下の2つは記述されていると思いますが、showにパラメータがついたルートに関しては、記述されていないはずです。以下の2つはrails generateの際に指定したアクションのルートは生成時に記述されます。

  get 'posts/index'
  get 'posts/show'

'posts/show'にパラメータがついたルートを追加しましょう。

get 'posts/show/:post_id', to:'posts#show'

こうなります。'posts/show/:post_id'にアクセスされた場合は「posts」コントローラの「show」アクションを処理するようにして下さい というルートづけになります。また、パラメータにはコロン(:)を付与します。先ほどのposts_controller.rbのshowアクション内にいきなり登場したpost_idはここで渡されるパラメータになります。



今回は、表示系のアクションのみに限定してサンプルをつくってみました次回は、登録、編集や削除をやってみようと思います。

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

関連記事

Railsの実装~アプリケーションの作成まで

Rubyをインストールできたら、次はRailsをインストールします。 Railsをインストールするには「RubyGems」というパッケージ管理システム(フレームワーク)を利用するのが一般的のよう

Comment

@yuruiyomu へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

    PAGE TOP ↑