Rails勉強会@東京第36回 Scaffoldの半歩先へ by Yuumi3

Rails勉強会@東京第36回
「Scaffoldの半歩先へ」記録
Ruby on Rails入門(初心者向け)

おすすめの本

バージョン少し古い。

プログラムできる人向けの本。

TODO管理アプリケーションの作成

TODO管理アプリケーションをRailsで作成する。
テーブル構造は次の表の通りで、

-----------------
| todo          |
|----------------
| due  | Date   |
| task | String |
----------------

データは期日順に並べる

# railsコマンドのヘルプを表示
rails --help

# todolistアプリケーションのひな形を生成
rails todolist

# 生成されたひな形にカレントディレクトリを移動
cd todolist

# script/generateは何かを生成するコマンド
ruby script/generate --help
# => Installed Generators
# =>   Builtin: controller, integration_test, mailer, migration, model, observer,
# =>   performance_test, plugin, resource, scaffold, session_migration

# scaffold
ruby script/generate scaffold --help
# => Usage: script/generate scaffold ModelName [field:type, field:type]

# todoのモデルと、ビュー、コントローラーなど一式を生成
# date、stringは、データベースの型でも、Rubyの型でもなく、Rails独自のもの
ruby script/generate scaffold todo due:date task:string

# 特に重要なファイル。データベースの管理をするファイル。
# テーブルの定義が記述されている。
less db/migrate/20081221044423_create_todos.rb
# => class CreateTodos < ActiveRecord::Migration
# =>     def self.up
# =>         create_table :todos do |t|
# =>             t.date :due
# =>             t.string :task
# => 
# =>             t.timestamps
# =>         end
# =>     end
# => 
# =>     def self.down
# =>         drop_table :todos
# =>     end
# => end

# rakeコマンドでビルドする
rake --help
# Rakefileの中身を確認
less Rakefile

# migrateの設定でデータベース作成
rake db:migrate

# データベースが生成された
sqlite3 db/development.sqlite3

# 生成したアプリケーションを実行
ruby script/server --help
ruby script/server


実行したアプリケーションには、未設定状態ではポート3000でアクセスできる
http://localhost:3000/
http://localhost:3000/todos


データベースを変更するには、scaffold時に -r オプションを使う
もしくは、設定ファイルを弄る。

vi config/database.yml
ディレクトリ構造
+- app
|   |  プログラム
|   +- controlers
|   |      コントローラ
|   +- helpers
|   |      ヘルパー、表示の補助
|   +- models
|   |      モデル
|   +- views
|       |  表示テンプレート
|       +- layouts
|       |      表示の枠組み
|       +- todos
|              edit.html.erb index.html.erb new.html.erb show.html.erb
|              モデル単位のテンプレート
|
+- config
|      設定
+- db
|      データベース
+- public
|      HTML CSS JS
+- test
|      テストコード
+- vendor
|      プラグイン
|      ログインなど
+- log
|      ログ
+- doc
      ドキュメント
index.html.rbの中身
<h1>Listing todos</h1>

<table>
  <tr>
    <th>Due</th>
    <th>Task</th>
  </tr>

<% for todo in @todos %>
  <tr>
    <td><%=h todo.due %></td>
    <td><%=h todo.task %></td>
    <td><%= link_to 'Show', todo %></td>
    <td><%= link_to 'Edit', edit_todo_path(todo) %></td>
    <td><%= link_to 'Destroy', todo, :confirm => 'Are you sure?', :method => :delete %></td>
  </tr>
<% end %>
</table>

<br />

<%= link_to 'New todo', new_todo_path %>
その他
  • Railsはデータベースを作る際、IDというカラムを必ず作る。
  • http://localhost:3000/todos/4.xml のようにURLを叩くと、Render XMLのデータを見られる。
  • flashはレスポンスまでのスコープ
flash[:notice] = 'Todo was successfully created.'
  • アプリケーション全体のビューのレイアウトを管理
app/views/layouts/todos.html.erb
一覧の並び順の変更

vi todos_controller.rb
def indexでオーダーを設定
@todos = Todo.find(:all, :order => 'due')

irbRails版 script/console

Todo.find(:all)と入力して検索できる

t = Todo.find(:all)
t[0]
t[0].due

中間テーブル

読み側はRailsが対応してくれる
書き込み側は、デベロッパー側でなんとかしなければならない

inspectでデバッグ

a = [1,2,3]
puts "#{a}"
# 詳細なメッセージを表示
puts "#{a.inspect}"

Railsの実行環境

FastCGIWEBrick、Passengerなどを使って公開。
現在、主流の構成は、

Web ブラウザ
 ↓
Apache mod_proxy_balancer
 ↓
Rails Mogrel
 ↓
RDB

プラグイン

  • Restful Authentication ログイン認証
  • jpmobile 携帯サイト対応
  • ActiveScaffold Ajaxを利用。

帳票っぽい画面の作り方

scaffoldで原型作って、余分なファイルを消す
もしくは、generateでつくる

script/generate controller view sho

共通するロジック

ヘルパーはビューに組み込まれるので、、、

application_helper.rb
todo_helper.rb
view_helper.rb

他にもいろいろあったけど、メモし忘れたり、まとめきれなかったり