参考にした記事URL一覧

前回に引き続き小学生でもわかる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>

と表示されたりする。