- プロジェクトを作成する
- サーバーを起動する
- generatorを使ってアプリケーションのひな形を作る
- ルーティングを変更する
- viewテンプレートをいじる
- Controllerをいじる
プロジェクトはrails new <Project Name> で作成します。
上記コマンドを実行すると<Project Name>のディレクトリができます。
$ rails new MyBlog
$ cd MyBlog
サーバーはWebrickがデフォルトでインストールされ、rails serverで起動することができます。
サーバーを起動したまま開発するには別のシェルを立ち上げます。
ブログの1つの記事をEntryとします。Entryにはタイトル,本文,作成日時があればよいとします。
Railsにはデータ型があり、以下のものが使えます。
binary
boolean
date
datetime
decimal
float
integer
primary_key
string
text
time
timestamp
RailsではActiveRecordというO/Rマッパーがデータベースを抽象化し、どんなRDBMSでもRails上では同じように使えます。
Entryではタイトルはstring、本文はtext、作成日時はtimestampとします。
Railsのgeneratorのscaffoldを使って、アプリケーションの基本的な機能の一覧(index)、詳細(show)、新規作成(new/create)、編集(edit/update)、削除(destroy)を行うために必要なコントローラ、モデル、ビューをまとめて生成します。
コマンドはrails generate scaffold <Model Name> <column1>:<type> <column2>:<type> …のように使います。
$ rails generate scaffold Entry title:string body:text
コマンドを実行すると下記のような出力がされます。
invoke active_record
create db/migrate/20130822162845_create_entries.rb
create app/models/entry.rb
invoke test_unit
create test/models/entry_test.rb
create test/fixtures/entries.yml
invoke resource_route
route resources :entries
invoke scaffold_controller
create app/controllers/entries_controller.rb
invoke erb
create app/views/entries
create app/views/entries/index.html.erb
create app/views/entries/edit.html.erb
create app/views/entries/show.html.erb
create app/views/entries/new.html.erb
create app/views/entries/_form.html.erb
invoke test_unit
create test/controllers/entries_controller_test.rb
invoke helper
create app/helpers/entries_helper.rb
invoke test_unit
create test/helpers/entries_helper_test.rb
invoke jbuilder
create app/views/entries/index.json.jbuilder
create app/views/entries/show.json.jbuilder
invoke assets
invoke coffee
create app/assets/javascripts/entries.js.coffee
invoke scss
create app/assets/stylesheets/entries.css.scss
invoke scss
create app/assets/stylesheets/scaffolds.css.scss
scaffoldを使うとModel, Controller, View Templates, migration script, js, cssなどが自動的に生成されます。 生成されたマイグレーションスクリプトを実行してDBを構築します。
$ rake db:migrate
== CreateEntries: migrating ==================================================
-- create_table(:entries)
-> 0.0015s
== CreateEntries: migrated (0.0016s) =========================================
サーバーを立ち上げて、localhost:3000/entriesへアクセスするとListing entriesと表示されてひと通りの入力、表示、編集、削除ができるようになります。
ルーティングテーブルは下記コマンドで確認できます。
$ rake routes
ルートにアクセスした時、Listing entriesが表示してもらいたいので、ルーティングテーブルを変更します。
下記をconfig/routes.rbへ追記して、rake routesコマンドで確認して下さい。
root 'entries#index'
現在の状態でhttp://localhost:3000/にアクセスした時に表示されるViewテンプレートはapp/views/entries/index.html.erbというファイルです。
これを以下のように変更してください。
するとhttp://localhost:3000/をリロードすると変更が反映されているはずです。
<h1>Listing entries</h1>
<table>
<thead>
<tr>
<th>Title</th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<% @entries.each do |entry| %>
<tr>
<td><%= link_to(entry.title, entry) %></td>
<td>[<%= link_to 'Edit', edit_entry_path(entry) %>]</td>
<td>[<%= link_to 'Destroy', entry, method: :delete, data: { confirm: 'Are you sure?' } %>]</td>
</tr>
<% end %>
</tbody>
</table>
<br>
<%= link_to 'New Entry', new_entry_path %>
controllerはアクセスを受け、どんな処理をし、その処理結果をどう返すかを決定します。
まずは作成日時の近い順に一覧表示させることをやってみます。app/controllers/entries_controller.rbを以下のように変更します。
@entries = Entry.all
↓
@entries = Entry.all.order("created_at DESC")
すると投稿日時の近い順で表示されます
- Blogモデルの生成
- Blog-Entryの関連付け
- seedデータの投入
- Viewの修正
くわしくはコミットログを見てください。