参考にした記事URL一覧
- 小学生でもわかるRuby on Rails入門 | OpenBook
- データベースとの接続(PostgreSQL編) - Ruby on Rails with OIAX
- [Rails]既存のMySQLテーブルに接続する方法 - Qiita
前回に引き続き小学生でもわかるRuby on Rails入門 | OpenBookを参考にしているが、色々すっとばしてデータベースを作るところをなぞる。 どうもモデルを作って、コマンド打ったら自動的にテーブル作ってくれてよしなにしてくれるらしい。
ではモデルを作る。
$ rails g model event name:string date:timestamp
モデルは単数型の英語で書くのが良いらしい。idは書かなくても自動で設定してくれるらしい。コマンドを実行すると次のようなファイルが出来る
app/models/event.rb
db/migrate/20140310033758_create_events.rb
後でテーブルの生成が上手く行かない場合に、変数の型で変なのを設定してる場合とかあるので、migrateフォルダのファイルを修正すると上手くいくことがある。
rake db:migrate
と打ったらテーブルが出来た。めでたしめでたし・・・と思ったらそういえばリモートサーバ上のPostgreSQLテーブルにデータ入れてたのを思い出したので、sqliteからPostgreSQLに使用データベースを変更してみる。
データベースとの接続(PostgreSQL編) - Ruby on Rails with OIAXを参考にしたが、PostgreSQLの設定までは終了しているので、その後の部分をやってみた。
Gemfileを編集
gem "sqlite3"
を
gem "pg"
に変更して、bundle installを実行。すると何かエラーが・・・メッセージを見るとRuby - gem install pgしてNo pg_configとなる対処法 - Qiitaが参考になりそうなので、libpq-devを入れてエラーを解消した(Ubuntuの場合)
config/database.yamlを編集
development:
adapter: sqlite3
database: db/development.sqlite3
pool: 5
timeout: 5000
みたいな箇所を
development:
adapter: postgresql
host: 000.000.00.00
port: 5432
database: bocho
username: ****
password: ****
pool: 5
timeout: 5000
に変更した。development以外にtest, productionと項目があって、それぞれ同じように変更した。これがどう違うのかはまだ勉強してない。localhostの場合はhost,portは要らないみたい。
テーブル名の変更
良く考えたら、PostgreSQLに保存してるデータのテーブルはeventsじゃなくてbochoだったので、そういう設定もしないといけない。その方法は[Rails]既存のMySQLテーブルに接続する方法 - Qiitaを参考にした。eventモデル(app/models/event.rb)を次のように変更
class Event < ActiveRecord::Base
self.table_name = 'bocho'
end
なんかググったら他の書式もあったけど、それだとエラー出たので、今はこの書き方なのかな? これで準備が出来たので、テーブルからデータを読み込んで表示してみる
データ読み込み
app/controllers/events_controller.rbを次のように書き換え
def show
@event = Event.find_by(:id=>params[:eventid])
end
これ多分
@event = Event.find(params[:eventid])
でもいける。
データ表示
app/views/events/show.html.erbを編集
<h1>Event</h1>
<dl>
<dt>日時</dt>
<dd><%= @event[:date].strftime('%Y/%m/%d %H:%m') %></dd>
<dt>イベント名</dt>
<dd><%= @event[:name] %></dd>
</dl>
<dd><%= @event.date.strftime('%Y/%m/%d %H:%m') %></dd>
でもおk
以上の作業後に [http://0.0.0.0:3000/events/show/1]にアクセスすると id=1,date=2014/03/01 10:00:00,name=ほげ というデータが入っていた場合、
<h1>Event</h1>
<dl>
<dt>日時</dt>
<dd>2014/03/01 10:00</dd>
<dt>イベント名</dt>
<dd>ほげ</dd>
</dl>
と表示されたりする。