Ubuntu16でsinatraで、追加の機能を追加

前回のプログラムに

追加の機能を追加する
手順は

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