前回のプログラムに
追加の機能を追加する
手順は
1,自動リロードの追加
2,追加項目入力用フォームの追加
3,テータ追加処理の追加
となりる
1,自動リロードの追加
開発効率向上のために自動リロードの追加する
sinatra-contrib
の追加(インストール)と
app.rbへの
require 'sinatra/reloader'
の追加となる
sina/Gemfile
に
gem 'sinatra-contrib'
を追加し
bundleにて、インストール
cd cd sina rbenv shell 2.2.5 bundle install --path vendor/bundle
app.rbを修正
require 'sinatra/reloader'
を追加
実行
bundle exec ruby app.rb
ブラウザ(Firfox)から
http://localhost:4567/
ブラウザ、起動後
app.rb
を修正し、ブラウザ、再表示で、変更されることを確認
2,追加項目入力用フォームの追加
追加のフォームを追加する
追加したものは
#coding: utf-8 require 'active_record' require 'mysql2' require 'sinatra' require 'sinatra/reloader' # Import files for database ActiveRecord::Base.configurations = YAML.load_file('database.yml') ActiveRecord::Base.establish_connection(:development) class User < ActiveRecord::Base end get '/' do @usrs = User.all erb %{ <html> <head> <meta charset="utf-8" /> <title>Test</title> </head> <body> <table border> <tr> <th>名前</th> <th>メールアドレス</th> </tr> <% @usrs.each do |us| %> <tr> <td><%= us.id %></td> <td><%= us.username %></td> <td><%= us.mailaddres %></td> </tr> <% end %> <form method="post" action="new"> <tr> <td><input type="submit" value="登録"></td> <td><input type="text" name="username"></td> <td><input type="text" name="mailaddres"></td> </tr> </form> </table> </body> </html> } end
再表示して、変更を確認する
登録ボタンを押して見る
エラー画面になる
データの追加処理
post ‘/new’
を、追加する
3,テータ追加処理の追加
app.rb
に、
post '/new' do usr = User.new usr.username = params[:username] usr.mailaddres = params[:mailaddres] usr.save redirect '/' end
を追加
行が追加されることを確認してみる
Mysql2::Error: Field 'created_at' doesn't have a default value: INSERT INTO <code>users</code> (<code>username</code>, <code>mailaddres</code>, <code>updated_at</code>) VALUES ('kon', 'kon@xxx.com', '2016-05-09 05:11:22')
エラーになる
updated_atは作ってくれるが
created_atは作ってくれないようである
DB側で、自動で、作成するように変更
ALTER TABLE users CHANGE created_at created_at datetime NOT NULL default current_timestamp;
mysqlのバージョンによる依存性の可能性があるため、確認
mysql --version mysql Ver 14.14 Distrib 5.7.12, for Linux (x86_64) using EditLine wrapper
5.7.12
の場合、うまく行った
参考
・【Ruby】Sinatraで、速攻でWebサイトを公開するための環境構築
・Sinatra+ActiveRecord+SQLite3で,軽量なWeb-DB連携例
・MySQL5.6で作成日時と更新日時を自動で設定してみるAdd Star