感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

データベースにデータを投入して表示してみる

スポンサーリンク

railsでデータベースを使ってみる

まずは、モデルとマイグレーションファイルを作成する

railsdemo>rails generate model friend name:string age:integer interest:string

次に、マイグレーションを実行する。

マイグレーションとは、テーブルレイアウトを作成/変更するための仕組み。
マイグレーションを使うことで、テーブルの保守作業の自動化、レイアウトの変更の反映が簡単にできるようになる。

上のコマンドで、以下のようなマイグレーションファイルができるので、
\railsdemo\db\migrate\20140309075505_create_friends.rb

rake db:migrate

を実行する。

本当にテーブルができているかどうかは、

rails dbconsole

と実行して、.tablesと入力すると、テーブルの一覧が見れる。

sqlite> .tables
books              friends            schema_migrations

データベースにテストデータを投入する

テストデータを投入するためには、フィクスチャを利用する。

上の例の続きで考えてみる。

\railsdemo\test\fixtures\friends.ymlというファイルができているが、このファイルを編集する。

# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html

one:
  name: takashi
  age: 28
  interest: music

two:
  name: yuria
  age: 25
  interest: basketball

three:
  name: kana
  age: 22
  interest: baseball

four:
  name: yoshida
  age: 33
  interest: battle

レコードラベル配下に、「列名:値」をひたすら書いていくことで、データを設定することができる。

で、その後に、

>rake db:fixtures:load FIXTURES=friends

を実行すると、データを投入することができる。

コントローラに

def friend_list
	@friends = Friend.all
end

みたいに書いて、
views/frient_list.html.erb
に以下のように書く。

<table border="1">
<tr>
  <th>名前</th><th>年齢</th><th>趣味</th>
</tr>
<% @friends.each do |friend| %>
  <tr>
    <td><%= friend.name %></td>
    <td><%= friend.age %></td>
    <td><%= friend.interest %></td>
  </tr>
<% end %>
</table>

で、ブラウザでリクエストを飛ばすと、以下のように表示される。

f:id:sho322:20140309173138j:plain

rails serverで別ポート指定

あんまりないと思うけど、3000番ポートが既に使われている場合は、

rails server -p 8080

みたいに、オプションでpを指定すると、ポートを指定することができる。

ポートが重複すると、こんな感じのエラーが出るみたい。
Apacheを80番で起動させて、あえてrails -server -p 80で起動してみると、こんなメッセージが出た。

[2014-03-09 16:47:11] WARN  TCPServer Error: Only one usage of each socket addre
ss (protocol/network address/port) is normally permitted. - bind(2)
Exiting
C:/Ruby/Ruby200-x64/lib/ruby/2.0.0/webrick/utils.rb:85:in `initialize': Only one
 usage of each socket address (protocol/network address/port) is normally permit
ted. - bind(2) (Errno::EADDRINUSE)

参考にした本

Ruby on Rails 3 アプリケーションプログラミング

Ruby on Rails 3 アプリケーションプログラミング

基本的には、「アプリケーション・プログラミング」を教科書にして読みながら、詳しく知りたい項目をポケットリファレンスを引きながら読んでいっている。リファレンスで補足しながら読み進めるやり方は、自分にはけっこう合っている気がする。
Ruby on Rails 3 ポケットリファレンス

Ruby on Rails 3 ポケットリファレンス