ドットインストールでRuby on Rails 3.2を学んだ際の詳細なメモ (24〜30)/全46

#主な内容 - Blogシステムを作る（続き）
[#24 新しい記事を追加しよう (1)](http://dotinstall.com/lessons/basic_rails/6524 "#24 新しい記事を追加しよう (1)")
[#25  新しい記事を追加しよう (2)](http://dotinstall.com/lessons/basic_rails/6525 "#25  新しい記事を追加しよう (2)")
[#26  新しい記事を追加しよう (3)](http://dotinstall.com/lessons/basic_rails/6526 "#26  新しい記事を追加しよう (3)")
[#27  バリデーションを設定しよう](http://dotinstall.com/lessons/basic_rails/6527 "#27  バリデーションを設定しよう")
[#28  バリデーションエラーを表示しよう](http://dotinstall.com/lessons/basic_rails/6528 "#28 バリデーションエラーを表示しよう")
[#29  フラッシュメッセージを表示する](http://dotinstall.com/lessons/basic_rails/6529 "#29  フラッシュメッセージを表示する")
[#30  メッセージをjQueryで消す](http://dotinstall.com/lessons/basic_rails/6530 "#30  メッセージをjQueryで消す")


Scaffoldを使わずに、一からブログアプリケーションを作成しよう（実践的）（続き）
>* コントローラーのメソッドと、それに対応するViewを作っていきましょう（続き）
>* Scaffoldでは自動生成してくれたModel、DBの設定、Controller、URL、Controllerのメソッド、Viewを自力で作ります。（続き - new,create）

>記事のタイトル一覧を表示するindexメソッド、その記事を表示するshowメソッドは完成したので次はその記事を表示するページが欲しいですね。ということでnewメソッド（新規作成フォーム）を作ります。また、フォームから送信されたデータを処理して新しい記事を作成するcreateメソッドも作成します。

バリデーション（検査）の設定をやってみよう（実践的）

#仕様（再確認）
1. Post（記事を投稿、編集、削除できる機能）
1. Comment（記事に対してコメントを投稿、削除できる機能）

#作成の流れ
1. blogプロジェクトを作成
1. Modelを作成
1. DB
1. Controllerの作成
1. URLの作成（ルーティングの設定）  ←ここまで終わっています
1. <b>Controllerのメソッドの作成  ←今はここです</b>
1. メソッドに対応するViewを作成

#6. 7. Controller内のMethod、それに対応するViewを作成（続き）
###作成するメソッド
>* index（完了）
>
>>app/views/posts/index.html.erb


* create
>Viewは無し（フォームに入力されたデータを処理するだけのメソッドなので、Viewは必要ありません。）

* new
>app/views/posts/new.html.erb

* edit
>app/views/posts/edit.html.erb

>* show（完了）
>
>>app/views/posts/show.html.erb

* update
>Viewは無し（編集画面からの送信を処理するだけのメソッドなので、Viewは必要ありません。）

* destroy
>Viewは無し（削除リンクをindex.html.erbにつけますが、destroy専用のViewは必要ありません。）

##new
まず新規オブジェクトを生成するnewメソッドを作ります。
###newメソッドを作成
Postモデルのオブジェクトを生成します。生成したオブジェクトに対してViewのフォームに入力されたデータで操作を加えていくのはcreateの仕事です。

```ruby:app/controllers/posts_controller.rb
class PostsController < ApplicationController

    #indexメソッド
    def index
        # Postから全てのデータを引っ張りだし、インスタンス変数postsに代入
        @posts = Post.all
    end

    #showメソッド
    def show
        # PostモデルのfindメソッドにparamsでURLから受け取ったIDを引数として与え、
        # そのデータが見つかったらインスタンス変数postに代入
        @post = Post.find(params[:id])
    end

    # newメソッド
    def new
      # 空のPostモデルオブジェクトを生成し、インスタンス変数postsに代入
      @post = Post.new
    end

end
```
>####（補足）newの動きを確認するためにrails consoleで実行してみます。
>
>では、Post.newを実行し、Postモデルのオブジェクトを作成し、その結果を確認します。

>```bash:Terminal
$ rails console
        SECURITY WARNING: No secret option provided to Rack::Session::Cookie.
        This poses a security threat. It is strongly recommended that you
        provide a secret to prevent exploits that may be possible from crafted
        cookies. This will not be supported in future versions of Rack, and
        future versions will even invalidate your existing user cookies.
>
>        Called from: /Users/shiraihiroki/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/actionpack-3.2.3/lib/action_dispatch/middleware/session/abstract_store.rb:28:in `initialize'.
>
>Loading development environment (Rails 3.2.3)
```
>```irb
irb(main):001:0> p = Post.new
=> #<Post id: nil, title: nil, content: nil, created_at: nil, updated_at: nil>
irb(main):002:0> 
```
>```irb
irb(main):002:0> p
=> #<Post id: nil, title: nil, content: nil, created_at: nil, updated_at: nil>
```
>きちんとオブジェクトが生成されていることが確認できました。
>もちろん、中身は空っぽです。ここをcreateメソッドでViewから渡されたデータを使って操作していきます。

###showメソッドに対応するView（show.html.erb）を作成
生成したPostオブジェクト（@post）に対するフォームを生成します。

```bash:Terminal
$ touch app/views/posts/new.html.erb
```
```erb:app/views/posts/new.html.erb
<%# ヘッダー %>
<h1>New Post</h1>

<%# @postに対するフォームを生成 %>
<%= form_for(@post) do |f| %>

  <%# titleに対するテキストフィールド %>
  <div class = "field">
    <%# titleというIDが付いたTitleという文字列ラベルを生成 %>
    <%= f.label :title %>
    <%# titleというIDが付いたTitleというテキストフィールドを生成 %>
    <%= f.text_field :title %>
  </div>

  <%# contentに対するテキストエリア（５行分） %>
  <div class = "field">
    <%# contentというIDが付いたContentという文字列ラベルを生成 %>
    <%= f.label :content %>
    <%# ContentというIDが付いたContentという５行分のテキストエリアを生成 %>
    <%= f.text_area :content, :rows => 5 %>
  </div>

  <%# 送信ボタンを生成 %>
  <div class = "actions">
    <%# contentというIDが付いたContentという文字列ラベルを生成 %>
    <%= f.submit %>
  </div>

<% end %>

<%# HOME（index）へ戻るリンク %>
<%= link_to 'home', posts_path %>
```
フォームの部分を少し詳しくみてみます。

* `<%= form_for(@post) do |f| %>`
>
@postにPostオブジェクトが入っていれば変数fに代入してそれに対応するフォームを生成。（今回はモデルにtitleとcontentの２つを設定してあるので、これらが生成されます。）
>
>フォームを生成してくれるRailsのヘルパーメソッドはform_for、form_tagの２つがありますが、今回は`特定のモデルに特化`したform_forを使います。form_tagは`特定のモデルに特化しない（汎用的な）`フォームを生成するメソッドです。（いろいろなモデルで動作する検索フォームなどで使います。）

* `<%= f.label :title %>`
>titleというIDが付いたラベルを[label](http://railsdoc.com/references/label "label")というヘルパーメソッドを用いて生成して表示。
>
>これでTitleラベルをクリックするとtitleというIDが付いたテキストフィールドを選択できるようになります。テキストフィールドさえ作成すれば、これは別になくてもかまいません。

* `<%= f.text_field :title %>`
>titleというIDが付いたテキストフィールドを生成

* `<%= f.submit %>`
>フォームfに入力された内容をHTTPリクエストで:urlオプションで指定したメソッドに送信します。
ここではメソッドを指定していませんが、デフォルトでform_forに渡されたオブジェクトが空だったら`<%= form_for @user, :url => {:action => 'create'} do |f| %>`、値が入っていたら`<%= form_for @user, :url => {:action => 'update'} do |f| %>`と同じ動作になるので、特に指定していません。
また、送信ボタンも同じように`Create Post`、`Update Post`のようになります。


####動作確認
http://localhost:3000/
![スクショ７.png](https://qiita-image-store.s3.amazonaws.com/0/27500/c60d60c3-8915-af7f-c9a9-3724078b30d9.png "スクショ７.png")

Newをクリックします。

![スクリーンショット 2014-03-11 19.33.48.png](https://qiita-image-store.s3.amazonaws.com/0/27500/cc942bc2-508c-b201-fd1f-47e7b390287a.png "スクリーンショット 2014-03-11 19.33.48.png")

レイアウトがださいですが、@postに対するフォームが完成しました。
また、homeへのリンクもきちんと表示されていますね。

##create
newのViewから渡された@postのデータをデータベースに登録するメソッドを作成します。
###createメソッド
newビューからHTTPリクエストで送信されたデータを元にオブジェクトを生成し、データベースに保存します。

```ruby:app/controllers/posts_controller.rb
class PostsController < ApplicationController

    # indexメソッド
    def index
        # Postから全てのデータを引っ張りだし、インスタンス変数postsに代入
        @posts = Post.all
    end

    # showメソッド
    def show
        # PostモデルのfindメソッドにparamsでURLから受け取ったIDを引数として与え、
        # そのデータが見つかったらインスタンス変数postに代入
        @post = Post.find(params[:id])
    end

    # newメソッド
    def new
      # 空のPostモデルオブジェクトを生成し、インスタンス変数postsに代入
      @post = Post.new
    end

    # createメソッド
    def create
      # Viewから渡されたデータを元にオブジェクトを生成
      @post = Post.new(params[:post])
      if @post.save
        # もしDBへの生成したオブジェクトの保存が成功したら/postsへリダイレクト（移動）  
        redirect_to posts_path
      else
        # もしDBへの生成したオブジェクトの保存が成功しなかったら/posts/newへ戻ってnewビューを直させる 
        render action: 'new'
      end
    end

end
```

> paramsメソッドを用いてHTTPリクエストからデータを取得します。
`{"title"=>"テキストフィールドの内容", "content"=>"テキストエリアの内容"}`　こんな感じで取得されます。

###動作確認
http://localhost:3000/posts/new
フォームに適当に入力します。

![スクリーンショット 2014-03-11 20.49.03.png](https://qiita-image-store.s3.amazonaws.com/0/27500/cc3ae129-4d39-7d8a-72f0-3e6fe83714f2.png "スクリーンショット 2014-03-11 20.49.03.png")

`Create Post`をクリックします。

![スクリーンショット 2014-03-11 20.52.24.png](https://qiita-image-store.s3.amazonaws.com/0/27500/a33bbda0-263f-718d-3638-96a1af6e7e03.png "スクリーンショット 2014-03-11 20.52.24.png")

/postsにリダイレクトされました。
リストにきちんと追加されていることが確認できました。

![スクリーンショット 2014-03-11 20.52.32.png](https://qiita-image-store.s3.amazonaws.com/0/27500/20f2861f-baab-90fc-b3ae-f15de931b90f.png "スクリーンショット 2014-03-11 20.52.32.png")

もちろんcontentもみれますね。

###バリデーションの設定
実は今のままだとnewで内容を入力しなくてもPostオブジェクトのデータが生成されてしまいます。内容のないブログなんてだれも見ませんので、「この条件でないとデータは生成しませんよ〜」というような規約を書いていきます。


![スクリーンショット 2014-03-13 13.17.28.png](https://qiita-image-store.s3.amazonaws.com/0/27500/a8526fde-b77e-3199-9c0a-7b60c2ef55f7.png "スクリーンショット 2014-03-13 13.17.28.png")

データに関する規約はModelに書くのでしたね。
[validates](http://railsdoc.com/references/validates "validates")を用いて、データに関する規約を書いていきます。

```ruby:app/models/post.rb
class Post < ActiveRecord::Base
  attr_accessible :content, :title

  # titleは入力が必須（presence -> 存在していることが必須）
  validates :title, :presence => true

  # titleは入力が必須かつ、文字数の長さが最低５は必須
  validates :content, :presence => true,
                      :length => { :minimum => 5 }
end
```

####動作確認
http://localhost:3000/posts/new
![スクリーンショット 2014-03-13 13.30.04.png](https://qiita-image-store.s3.amazonaws.com/0/27500/92c0cf24-bbb0-29bf-18f7-239212024116.png "スクリーンショット 2014-03-13 13.30.04.png")

フォームの内容を空のままにしてCreate Postをクリックします。

![スクリーンショット 2014-03-13 13.30.18.png](https://qiita-image-store.s3.amazonaws.com/0/27500/2f946ecb-e627-3ad6-98c5-c2554ee1562d.png "スクリーンショット 2014-03-13 13.30.18.png")

Createメソッドで、データをセーブする段階でこのバリデーションの設定が読込まれます。
データの規約に反しているため、newページへ戻されました。

![スクリーンショット 2014-03-13 13.30.31.png](https://qiita-image-store.s3.amazonaws.com/0/27500/c25991dc-87d6-4fad-43a6-a48975b8e9e4.png "スクリーンショット 2014-03-13 13.30.31.png")

もちろん、データは作成されていません。

###バリデーションエラーの表示
バリデーションの設定は完了しましたが、このブログのユーザーからしてみると、なんでこんな動作になるのかわかりません。どんな理由でnewページに戻されているのかを示してあげる必要がありますね。ということでバリデーションエラーを表示する機能も付けてみたいと思います。

```erb:app/views/posts/new.html.erb
<%# ヘッダー %>
<h1>New Post</h1>

<%# @postに対するフォーム %>
<%= form_for(@post) do |f| %>
  
  <%# もし@postにエラーがあったら %>
  <% if @post.errors.any? %>
    <%# 順序無しリスト %>
    <ul>
      <%# エラーの数だけループ %>
      <% @post.errors.full_messages.each do |msg| %>
        <%# メッセージの内容を表示  %>
        <li><%= msg %></li>
      <% end %>
    </ul>
  <% end %>
  
  <%# titleに対するテキストフィールド %>
  <div class = "field">
    <%# titleに対するテキストフィールド %>
    <%= f.label :title %>
    <%= f.text_field :title %>
  </div>

  <%# contentに対するテキストエリア（５行分） %>
  <div class = "field">
    <%= f.label :content %>
    <%= f.text_area :content, :rows => 5 %>
  </div>

  <%# 送信ボタン（createメソッドへ） %>
  <div class = "actions">
    <%= f.submit %>
  </div>

<% end %>

<%# HOME（index）へ戻るリンク %>
<%= link_to 'home', posts_path %>
```
エラー表示の部分を少し詳しくみてみます。

* `<% if @post.errors.any? %>`
>
バリデーションエラーがあった場合は、エラーが発生したオブジェクトのerrorsにエラーが発生したIDが格納されます。

* `<% @post.errors.full_messages.each do |msg| %>`
>エラーの詳しい内容（フルメッセージ）はerrors.full_messagesに格納されます。

####動作確認
http://localhost:3000/posts/new

さっきと同じようにフォームを空のままCreate Postします。

![スクリーンショット 2014-03-13 14.21.34.png](https://qiita-image-store.s3.amazonaws.com/0/27500/618f2676-ea04-7f66-e6eb-8b606fba8eca.png "スクリーンショット 2014-03-13 14.21.34.png")

* Title、Contentは空にはできない。
* Contentが短すぎる。（最小は５文字）

ということがエラーメッセージからわかります。

###フラッシュメッセージの表示
ユーザーの操作に対してブログシステムがどの様に動作したかということをフラッシュメッセージ（簡単な一時的通知メッセージ）を使って知らせてあげるとさらに便利なので、やってみます。

```ruby:app/controllers/posts_controller.rb
# coding: utf-8

class PostsController < ApplicationController

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
　　　　　　　　中略
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

  # createメソッド
  def create
    # Viewから渡されたデータを元にオブジェクトを生成
    @post = Post.new(params[:post])
    if @post.save
      # もしDBへの生成したオブジェクトの保存が成功したら/postsへリダイレクト（移動）  
      redirect_to posts_path
      flash[:notice] = '作成されました！'
    else
      # もしDBへの生成したオブジェクトの保存が成功しなかったら/posts/newへ戻ってnewビューを直させる 
      render action: 'new'
    end
  end

end
```

* `# coding: utf-8`
>
プログラムのコメント以外で日本語を使う場合は必須です。UTF-8でプログラムを書いていますよ〜ということをrailsシステムに教えてあげます。

* `flash[:notice] = '作成されました！'`
>ドットインストールでは`redirect_to posts_path, notice: '作成されました！'`としています。もちろんこれでも正常に動作しますが、これはredirect_toメソッドの機能なので、flashの機能を使うことにします。これでどんなときでもflashを使うことができますね。
flashメソッドにメッセージを格納する変数をシンボルで指定し、メッセージを指定します。

ではViewの方にも変更を加えていきます。
表示させたいところに`<%= notice %>`を追加するだけです。

```erb:app/views/posts/index.html.erb
<%# 一時通知メッセージ %>
<%= notice %>
<%# ヘッダー %>
<h1>Posts</h1>
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
　　　　　　　　　中略
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
```

####動作確認
http://localhost:3000/posts/new

![スクリーンショット 2014-03-13 17.37.37.png](https://qiita-image-store.s3.amazonaws.com/0/27500/e9938ea2-4adf-f8dc-8719-c9f211f13181.png "スクリーンショット 2014-03-13 17.37.37.png")

なにかしら入力してCreate Postします。

![スクリーンショット 2014-03-13 17.41.02.png](https://qiita-image-store.s3.amazonaws.com/0/27500/66d3f7ac-5760-0e4c-0d4b-8a23b5938d6c.png "スクリーンショット 2014-03-13 17.41.02.png")

きちんとフラッシュメッセージが表示されていることが確認できました。

###JQueryを使ってかっこよく
今作ったフラおッシュメッセージをよくある一定時間後に消すといったことをやってみます。

```erb:app/views/posts/index.html.erb
<%# 一時通知メッセージ %>
<div id="notice"><%= notice %></div>
<%# ヘッダー %>
<h1>Posts</h1>

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
　　　　　　　　　中略
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

<%# HOME、Newリンク %>
<%= link_to 'home', posts_path %> | <%= link_to 'New', new_post_path %>

<script>
    $(function() {
        //一定時間後に処理を行う（0.8秒後）
        setTimeout(function() {
            //idが"notice"のdiv要素をゆっくりとフェードアウト
            $('#notice').fadeOut("slow");
        }, 800);
    });
</script>

```
* `<div id="notice"><%= notice %></div>`
>Javascriptでこの部分を扱うためにdivで囲ってidをつけます。

* `<script>〜</script>`
>JQueryのコードです。

####動作確認
http://localhost:3000/posts/new

さっきと同じようにフォームになにかしら入力してCreate Postしてみてください。
indexページに戻り、フラッシュメッセージがフェードアウトして消えることが確認できます。

#メモ一覧
1. [ドットインストールでRuby on Rails 3.2を学んだ際の詳細なメモ (1〜2)/全46](http://qiita.com/hirokishirai/items/34d26a40f99425333f79 "ドットインストールでRuby on Rails 3.2を学んだ際の詳細なメモ (1〜2)/全46")
>[#01	Ruby on Railsとは何か？](http://dotinstall.com/lessons/basic_rails/6501 "#01	Ruby on Railsとは何か？")
[#02	必要となるツールを揃えよう](http://dotinstall.com/lessons/basic_rails/6502 "#02	必要となるツールを揃えよう")
>
>* Ruby on Railsはこんなものですよ
>* 必要な情報はここら辺で集まりますよ
>* 必要な知識にはこんなものがありますよ
>* 開発環境はこんな感じですよ

1. [ドットインストールでRuby on Rails 3.2を学んだ際の詳細なメモ 3/全46](http://qiita.com/hirokishirai/items/e0d3a7aa1de02ca2dbfc "ドットインストールでRuby on Rails 3.2を学んだ際の詳細なメモ 3/全46")
>[#03	MVCとは何か？](http://dotinstall.com/lessons/basic_rails/6503 "#03	MVCとは何か？")
>
>* Ruby on RailsはMVCフレームワークですよ
>* MVCはこんなものですよ

1. [ドットインストールでRuby on Rails 3.2を学んだ際の詳細なメモ (4〜8)/全46](http://qiita.com/hirokishirai/items/0038bbe5cd35ca92d60f "ドットインストールでRuby on Rails 3.2を学んだ際の詳細なメモ (4〜8)/全46")
>[#04 はじめてのRailsプロジェクト](http://dotinstall.com/lessons/basic_rails/6504 "#04 はじめてのRailsプロジェクト")
[#05 ファイル構成をみていこう](http://dotinstall.com/lessons/basic_rails/6505 "#05 ファイル構成をみていこう")
アプリケーションを作成する基本的な流れを覚えましょう
>
>[#06 Webサーバーを立ち上げよう](http://dotinstall.com/lessons/basic_rails/6506 "#06 Webサーバーを立ち上げよう")
作成したWebアプリケーションをどうささせてみましょう
>
>[#07 scaffoldを使ってみよう (1)](http://dotinstall.com/lessons/basic_rails/6507 "#07 scaffoldを使ってみよう (1)")
[#08 scaffoldを使ってみよう (2)](http://dotinstall.com/lessons/basic_rails/6508 "#08 scaffoldを使ってみよう (2)")
DB、Model、View、Controllerの作成、URLの設定をしてみましょう

1. [ドットインストールでRuby on Rails 3.2を学んだ際の詳細なメモ (9〜13)/全46](http://qiita.com/hirokishirai/items/3c756d65fa837f765dc9 "ドットインストールでRuby on Rails 3.2を学んだ際の詳細なメモ (9〜13)/全46")
>[#09 ブログシステムを作ろう](http://dotinstall.com/lessons/basic_rails/6509 "#09 ブログシステムを作ろう")
[#10	新しいプロジェクトを作ろう](http://dotinstall.com/lessons/basic_rails/6510 "#10	新しいプロジェクトを作ろう")
[#11	Postモデルを作ろう](http://dotinstall.com/lessons/basic_rails/6511 "#11	Postモデルを作ろう")
[#12	Postsコントローラーを作ろう](http://dotinstall.com/lessons/basic_rails/6512 "#12	Postsコントローラーを作ろう")
[#13	ルーティングの設定をしよう](http://dotinstall.com/lessons/basic_rails/6513 "#13	ルーティングの設定をしよう")
Scaffoldを使わずに、一からブログアプリケーションを作成しよう（実践的）
プロジェクト、Model、Controllerを作成し、ルーティングの設定をしよう

1. [ドットインストールでRuby on Rails 3.2を学んだ際の詳細なメモ (14〜21)/全46](http://qiita.com/hirokishirai/items/9c9b02311a95fb6a2e5d "ドットインストールでRuby on Rails 3.2を学んだ際の詳細なメモ (14〜21)/全46")
>[#14	デバッグに使えるコンソールについて](http://dotinstall.com/lessons/basic_rails/6514 "#14	デバッグに使えるコンソールについて")
[#15	コントローラーのメソッドについて](http://dotinstall.com/lessons/basic_rails/6515 "#15	コントローラーのメソッドについて")
[#16	記事の一覧を表示する (1)](http://dotinstall.com/lessons/basic_rails/6516 "#16	記事の一覧を表示する (1)")
[#17	記事の一覧を表示する (2)](http://dotinstall.com/lessons/basic_rails/6517 "#17	記事の一覧を表示する (2)")
[#18	リンクを貼ってみよう](http://dotinstall.com/lessons/basic_rails/6518 "#18	リンクを貼ってみよう")
[#19	HTMLテンプレートを変更しよう](http://dotinstall.com/lessons/basic_rails/6519 "#19	HTMLテンプレートを変更しよう")
[#20	ロゴ画像を表示させてみよう](http://dotinstall.com/lessons/basic_rails/6520 "#20	ロゴ画像を表示させてみよう")
[#21	記事一覧画面をrootにしてみよう](http://dotinstall.com/lessons/basic_rails/6521 "#21	記事一覧画面をrootにしてみよう")
>
>Scaffoldを使わずに、一からブログアプリケーションを作成しよう（実践的）（続き）
`rails console`とか、`rails dbconsole`なんかの便利なツールがありますよ
コントローラーのメソッドと、それに対応するViewを作っていきましょう
>
>Scaffoldでは自動生成してくれたModel、DBの設定、Controller、URL、Controllerのメソッド、Viewを自力で作ります。（まずは１つ）

1. [ドットインストールでRuby on Rails 3.2を学んだ際の詳細なメモ (22〜23)/全46](http://qiita.com/hirokishirai/items/ba9bea6679ca1a1f8629 "ドットインストールでRuby on Rails 3.2を学んだ際の詳細なメモ (22〜23)/全46")
>[#22	記事の詳細を表示する (1)](http://dotinstall.com/lessons/basic_rails/6522 "#22	記事の詳細を表示する (1)")
[#23	記事の詳細を表示する (2)](http://dotinstall.com/lessons/basic_rails/6523 "#23	記事の詳細を表示する (2)")
>
>Scaffoldを使わずに、一からブログアプリケーションを作成しよう（実践的）（続き）
>
>* コントローラーのメソッドと、それに対応するViewを作っていきましょう（続き）
>* Scaffoldでは自動生成してくれたModel、DBの設定、Controller、URL、Controllerのメソッド、Viewを自力で作ります。（続き - show）

1. [ドットインストールでRuby on Rails 3.2を学んだ際の詳細なメモ (24〜30)/全46](http://qiita.com/hirokishirai/items/979a1ca68716698ec103 "ドットインストールでRuby on Rails 3.2を学んだ際の詳細なメモ (24〜30)/全46")
>
[#24 新しい記事を追加しよう (1)](http://dotinstall.com/lessons/basic_rails/6524 "#24 新しい記事を追加しよう (1)")
[#25	新しい記事を追加しよう (2)](http://dotinstall.com/lessons/basic_rails/6525 "#25	新しい記事を追加しよう (2)")
[#26	新しい記事を追加しよう (3)](http://dotinstall.com/lessons/basic_rails/6526 "#26	新しい記事を追加しよう (3)")
[#27	バリデーションを設定しよう](http://dotinstall.com/lessons/basic_rails/6527 "#27	バリデーションを設定しよう")
[#28	バリデーションエラーを表示しよう](http://dotinstall.com/lessons/basic_rails/6528 "#28	バリデーションエラーを表示しよう")
[#29	フラッシュメッセージを表示する](http://dotinstall.com/lessons/basic_rails/6529 "#29	フラッシュメッセージを表示する")
[#30	メッセージをjQueryで消す](http://dotinstall.com/lessons/basic_rails/6530 "#30	メッセージをjQueryで消す")
>
Scaffoldを使わずに、一からブログアプリケーションを作成しよう（実践的）（続き）
>
>* コントローラーのメソッドと、それに対応するViewを作っていきましょう（続き）
>* Scaffoldでは自動生成してくれたModel、DBの設定、Controller、URL、Controllerのメソッド、Viewを自力で作ります。（続き - new,create）
>
>記事のタイトル一覧を表示するindexメソッド、その記事を表示するshowメソッドは完成したので次はその記事を表示するページが欲しいですね。ということでnewメソッド（新規作成フォーム）を作ります。また、フォームから送信されたデータを処理して新しい記事を作成するcreateメソッドも作成します。
>
バリデーション（検査）の設定をやってみよう（実践的）

1. [ドットインストールでRuby on Rails 3.2を学んだ際の詳細なメモ (31〜33)/全46](http://qiita.com/hirokishirai/items/3c0552e258b2f7d5defc "ドットインストールでRuby on Rails 3.2を学んだ際の詳細なメモ (31〜33)/全46")
>
[#31	記事を更新してみよう (1)](http://dotinstall.com/lessons/basic_rails/6531 "#31	記事を更新してみよう (1)")
[#32	記事を更新してみよう (2)](http://dotinstall.com/lessons/basic_rails/6532 "#32	記事を更新してみよう (2)")
[#33	記事を更新してみよう (3)](http://dotinstall.com/lessons/basic_rails/6533 "#33	記事を更新してみよう (3)")
>Scaffoldを使わずに、一からブログアプリケーションを作成しよう（実践的）（続き）
>
>* コントローラーのメソッドと、それに対応するViewを作っていきましょう（続き）
>* Scaffoldでは自動生成してくれたModel、DBの設定、Controller、URL、Controllerのメソッド、Viewを自力で作ります。（続き - edit, update）
>
>記事のタイトル一覧を表示するindexメソッド、その記事を表示するshowメソッド、記事の新規作成フォームを作成するnewメソッド、記事を作成するcreateメソッドは完成したので次はその記事を編集するページが欲しいですね。ということでeditメソッド（記事編集フォーム）を作ります。また、フォームから送信されたデータを処理して記事を上書きするupdateメソッドも作成します。
1. [ドットインストールでRuby on Rails 3.2を学んだ際の詳細なメモ (34〜36)/全46](http://qiita.com/hirokishirai/items/cf4cc479b09d35501fc3 "ドットインストールでRuby on Rails 3.2を学んだ際の詳細なメモ (34〜36)/全46")
>
[#34	記事を削除してみよう](http://dotinstall.com/lessons/basic_rails/6534 "#34	記事を削除してみよう")
[#35	削除処理をAjax化しよう (1)](http://dotinstall.com/lessons/basic_rails/6535 "#35	削除処理をAjax化しよう (1)")
[#36	削除処理をAjax化しよう (2)](http://dotinstall.com/lessons/basic_rails/6536 "#36	削除処理をAjax化しよう (2)")
>Scaffoldを使わずに、一からブログアプリケーションを作成しよう（実践的）（続き）
>
>* コントローラーのメソッドと、それに対応するViewを作っていきましょう（続き）
>* Scaffoldでは自動生成してくれたModel、DBの設定、Controller、URL、Controllerのメソッド、Viewを自力で作ります。（続き - destroy）
>
>記事のタイトル一覧を表示するindex、その記事を表示するshow、記事の新規作成フォームを作成するnew、記事を作成するcreate、記事を編集するeditは完成したので次はその記事を削除するページが欲しいですね。ということでdestroyを作ります。

1. [ドットインストールでRuby on Rails 3.2を学んだ際の詳細なメモ (37〜46)/全46](http://qiita.com/hirokishirai/items/a25da39da0e6b32246ed "ドットインストールでRuby on Rails 3.2を学んだ際の詳細なメモ (37〜46)/全46")
>
[#37	Commentモデルを作ろう](http://dotinstall.com/lessons/basic_rails/6537 "#37	Commentモデルを作ろう")
[#38	Commentsコントローラーを作ろう](http://dotinstall.com/lessons/basic_rails/6538 "#38	Commentsコントローラーを作ろう")
[#39	コメントを表示させよう](http://dotinstall.com/lessons/basic_rails/6539 "#39	コメントを表示させよう")
[#40	コメントを投稿してみよう (1)](http://dotinstall.com/lessons/basic_rails/6540 "#40	コメントを投稿してみよう (1)")
[#41	コメントを投稿してみよう (2)](http://dotinstall.com/lessons/basic_rails/6541 "#41	コメントを投稿してみよう (2)")
[#42	バリデーションを設定しよう](http://dotinstall.com/lessons/basic_rails/6542 "#42	バリデーションを設定しよう")
[#43	コメントを削除してみよう (1)](http://dotinstall.com/lessons/basic_rails/6543 "#43	コメントを削除してみよう (1)")
[#44	コメントを削除してみよう (2)](http://dotinstall.com/lessons/basic_rails/6544 "#44	コメントを削除してみよう (2)")
[#45	コメント件数を表示してみよう](http://dotinstall.com/lessons/basic_rails/6545 "#45	コメント件数を表示してみよう")
[#46	Railsを日本語化しよう](http://dotinstall.com/lessons/basic_rails/6546 "#46	Railsを日本語化しよう")
>Scaffoldを使わずに、一からブログアプリケーションを作成しよう（実践的）（続き）
>
>* 新しい機能（Comment）を追加させましょう
>* Scaffoldでは自動生成してくれたModel、DBの設定、Controller、URL、Controllerのメソッド、Viewを自力で作ります。