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
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にアクセスします。するとこんな画面が表示されます。
New Userをクリックすると、入力画面が表示されます。nameに名前を入力して、登録してみます。
こんな感じで登録が完了しました。
このユーザーのidは1です。0じゃないんですね。
ユーザーが登録できたので、このユーザーで本の感想を登録します。
localhost:3000/books/newにアクセスします。
こんな画面が表示されます。
titleとcommentを適当に入力して、user_idには1と入力します。
こんな感じで登録できました。
ブラウザを使った登録はこんな感じです。
次はコンソールから登録してみましょう。
コンソールを起動します。
$ 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にアクセスすると、ユーザーがこんな感じに登録できています。
各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}"
裸ですが、ユーザーが登録した本の感想が表示されます。
こんな感じ。
以上で、scaffoldを使った簡単な読書録は終了です。
次から、CoffeeScriptとSassを見てみようと思います。