Todoリストの作成
p.11〜16まで。この回からscaffoldでmodelを作って、DBにデータを貯めるアプリを作ることになる
ここまでの作業内容。
http://bitbucket.org/shokai/web-innovative/changeset/ecbe2a4194f3/
rails _2.0.2_ todo cd todo
config/database.yml を一応確認。DBとしてsqlite3が選択されていればよし。
# SQLite version 3.x # gem install sqlite3-ruby (not necessary on OS X Leopard) development: adapter: sqlite3 database: db/development.sqlite3 timeout: 5000 # Warning: The database defined as 'test' will be erased and # re-generated from your development database when you run 'rake'. # Do not set this db to the same as development or production. test: adapter: sqlite3 database: db/test.sqlite3 timeout: 5000 production: adapter: sqlite3 database: db/production.sqlite3 timeout: 5000
scaffoldでMVCまとめてgenerateする。todoは単数形にするのに注意
ruby script/generate scaffold todo task:string done:boolean
db/migrate/001_create_todos.rb にmigrateコードが生成されているのを確認
class CreateTodos < ActiveRecord::Migration def self.up create_table :todos do |t| t.string :task t.boolean :done t.timestamps end end def self.down drop_table :todos end end
migrade。これでDBが初期化される
rake db:migrate
ruby script/server
http://localhost:3000/todos で作ったtodoが見える。複数形に注意。
app/views/todos/index.html.erb にdoneというアクションへのリンクを追加。
<h1>Listing todos</h1> <table> <tr> <th>Task</th> <th>Done</th> </tr> <% for todo in @todos %> <tr> <td><%=h todo.task %></td> <td><%=h todo.done %></td> <td><%= link_to 'Done', :action => 'done', :id => todo %></td><!-- doneアクションへのリンク --> <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 %>
app/controllers/todos_controller.rb にdoneメソッド追加。これがviewから呼ばれる。
class TodosController < ApplicationController def done @todo = Todo.find(params[:id]) @todo.done = true; @todo.save redirect_to :action => 'index' end
ブラウザで http://localhost:3000/todos を見てみる。
doneを押すとfalseがtrueになり、タスク完了のしるしになる。