初心者がRailsを勉強するブログ

Railsを0からお勉強するブログです。

scaffoldを使ったRailsアプリの作成手順

今回は、scaffoldを使って読書録を作ろうと思います。

Railsアプリの作成の流れを俯瞰することが目的ですので、特に何も凝ったことはしない方針で行きます。
Railsの手順に注目してもらいたいからこその方針であり、手抜きではありません。

それでは、rails newから行きましょう。アプリ名はbook_shelfで行きます。

$ rails new book_shelf

book_shelfに入ります。

$ cd book_shelf

今回はコンソールを使いたいのですが、デフォルトのirbでは全然満足できないです。pryを使いましょう。

$ vim Gemfile

Gemfileの一番下に以下のコードを追加します。ついでなので、テンプレートをslimにします。erbめんどいです。

# コンソールをpryにする
gem 'pry-rails'

# テンプレートをslimにする
gem 'slim-rails'

Gemfileを書き換えたので、入れてしまいましょう。

$ bundle install

今回の読書録は、特にcssとjsは書かず、ブラウザとコンソールからアイテムを登録する手順を見てみましょう。

まずは、scaffoldでユーザーと本のモデルを作ります。
generateはgで行きます。
ユーザーのカラムはnameだけで行きましょう。認証もしません。

$ rails g scaffold User name:string

次に、本のモデルを作ります。本は、ユーザーに紐付けるので、user_idを持たせます。あと、本のタイトルと感想を用意します。

$ rails g scaffold Book title:string comment:text user_id:integer

これで必要なモデルが揃いました。ユーザーと本の関係をモデルに書きましょう。
ユーザーと本は、ユーザーがたくさんの本を持ち、本は一人のユーザーに紐付けられる関係にあります。
なので、Userモデルにhas_manyを、Bookモデルにbelongs_toを書きます。
まずはUserモデルを書きます。

$ vim app/models/user.rb

で、中に

has_many :books

と書きます。複数形に注意しましょう。
次にBookモデルを書きます。

$ vim app/models/book.rb

で、中に

belongs_to :user

と書きます。こちらは単数形です。
これでモデルの関係を書けました。データベースをmigrateしましょう。

$ rake db:migrate

これでrails serverでブラウザに表示できます。さっそく見てみましょう。

$ rails s

f:id:carmelokarimero:20140113225111p:plain

Railsのデフォルトページが開きました。routeを設定していないからです。実行を止めて、routeを設定しましょう。今回はUserのindexをrootにします。
routes.rbを編集します。

$ vim config/routes.rb

で、コメントアウトされているroot "welcome#index"の下に

root "users#index"

と書きます。これでデフォルトページがUserのindexアクションになりました。URLはlocalhost:3000/users/indexです。
アプリのロジック部分が完成したので、さっそく使ってみましょう。

まず、ブラウザを使ってユーザーを登録して、本の感想を書いてみます。
rails sでサーバーを起動して、localhost:3000にアクセスします。するとこんな画面が表示されます。

f:id:carmelokarimero:20140113222227p:plain

New Userをクリックすると、入力画面が表示されます。nameに名前を入力して、登録してみます。
こんな感じで登録が完了しました。

f:id:carmelokarimero:20140113222245p:plain

このユーザーのidは1です。0じゃないんですね。
ユーザーが登録できたので、このユーザーで本の感想を登録します。
localhost:3000/books/newにアクセスします。
こんな画面が表示されます。

f:id:carmelokarimero:20140113222247p:plain

titleとcommentを適当に入力して、user_idには1と入力します。
こんな感じで登録できました。

f:id:carmelokarimero:20140113222244p:plain

ブラウザを使った登録はこんな感じです。

次はコンソールから登録してみましょう。
コンソールを起動します。

$ rails console

こっちでも大丈夫です。

$ rails c

pryが起動したら、ユーザーを登録します。このユーザーのidは2です。

User.create name: "kenta2"

次に、本を登録しましょう。user_idは2を指定します。

Book.create title: "test_book2", comment: "test_comment", user_id: 2

これでコンソールからも登録出来ました。サーバーを起動して確認してみましょう。

$ rails s

localhost:3000/usersにアクセスすると、ユーザーがこんな感じに登録できています。

f:id:carmelokarimero:20140113222242p:plain

各userのページで登録した記事が見れないのもアレなので、viewを少しだけ書きましょう。
まず、controllerを書いて、ユーザーと本を取得します。

$ vim app/controllers/users_controller.rb

ファイルを開いたら、showメソッドにコードを追加します。

@user = User.find_by_id params[:id].to_i
@books = @user.books

これでもいけます。

Book.find :all, conditions: ['user_id = ?', params[:id]]

ユーザーに紐付いた本が取れたので、viewsのslimに追加します。

$ vim app/views/users/show.html.slim

slimの下に@booksを表示しましょう。

 - @books.each do |book|
  p = "タイトル: #{book.title}"
  p = "コメント: #{book.comment}"

裸ですが、ユーザーが登録した本の感想が表示されます。
こんな感じ。

f:id:carmelokarimero:20140113222241p:plain

以上で、scaffoldを使った簡単な読書録は終了です。
次から、CoffeeScriptとSassを見てみようと思います。