2012年4月22日日曜日

Rails3.2.3で掲示板をつくる。(MySQLを使います)


環境:
MySQLを使える状態(gemでmysql 2.8.1を入れている、Mac自体にmysql5.5.23を入れている)
viコマンドが使えるor AptanaStudio3 orエディタで編集の仕方を理解していること

学べること:
railsの使い始めの方に、はじめの一歩
mysqlとrailsの連携が簡単ということを学ぶ

個人的には、mysqlを使えた方が、sqlite使いになるより将来有益であると思っているんで、
mysqlを利用する方法を推奨します。また、viコマンドは、ターミナルとにらめっこが多いのと操作性がいまいちという点でAptanaを推奨してます。Aptanaのインストールについてはこちらから。
Aptana Studio 3ダウンロードはこちら↓
http://www.aptana.com/products/studio3/download
AptanaではなんもいじらないとjQueryが入っていません。なので、インストール方法はこちらを参考に↓
http://banker0507.blogspot.jp/2012/04/aptana-studio-3jquery.html

では、早速掲示板を作ってみたいと思います。
scaffoldは最終的にDBを使えないので、
ちゃんとDBを使う方法を学んどいた方がいいです、はい。

あとからDB変更もできますが、最初に宣言した方が、簡単です。
$ rails new bbs(名前) -T -J -d mysql
$ cd bbs  bbsディレクトリに移動

まずデータベースの設定 config/database.yml 
ここのpassとユーザー名、3箇所とも変更
==================================================================
ymlとは(YAML)”YAML Ain't a Markup Language"
YAMLはマークアップ言語ではなく、データを入力しておくため(データ重視を目的とした)の言語。
テキストのため可読。概念はXMLやC,Python、Perlから来ている。
インデントにはタブが使えず、スペースのみである。
ちなみにXMLとは、文書やデータを記述するためのマークアップ言語。
ちなみにJSONはjavascript(object notation)で書かれた同じようなデータ利用できる言語。
csvファイるのほうが、JSONより軽いらしい。
==================================================================

$ rake db:create データベースつくりますよー
$ rails server   http://localhost:3000/  でひらくと Welcome aboardがひらけます。
ここでhttp://localhost:3000/bbs2でやるとまだルーティングがうまくできてないので、
エラーが出ます。
エラーが出たでしょw

$ rails generate controller movies コントローラークラスの作成をします。
ちなみに走らせたrails serverを止めるには、ターミナル上でctrl+c です。(command+cではないです)

app/controllers/movies_controller.rb を編集します。
# coding: utf-8
class MessagesController < ApplicationController
   def  index
     @msg = 'こんにちわ!'
   end

end

テンプレートファイルを作成
app/views/messages/index.html.erb
<%= @msg %> 
ここでindex.html.erbファイルはできてないはずなんで自分で保存するときか、名前をつけるときに拡張子をいじって保存します。

ルーティング設定の定義
$ vi config/routes.rb  ←ターミナル上でいじりたいなら、viをつけていじります。基本操作は :wq保存して終了、 :w保存せずに終了 insert mode との切り替えはescで。
match ':controller(/:action(/:id(.:format)))'

ここでhttp://localhost:3000/movies で「こんにちわ!」が表示されるはずです。
=================================================================
表示されない場合で、一番考えられるのは、ルーティング設定のところで、
余分にスペースなどをいれていないでしょうか?
=================================================================
モデルの作成
$ rails generate model movie name:string title:string body:text password:string
$ rake db:migrate  マイグレーションを実行します。

この状態でmysqlでデータベースが作られているか、確認します。
$ mysql -u 自分で登録したもの -p
password:自分で登録したもの

mysql> show databases;
mysql>use bbs_development;
mysql>show tables;
でここにmoviesというDBが存在することがわかります。
注意する点はmodelでは、movieというDBを作ったのに、実際はmoviesになっていることです。

続いて、test/fixtures/movies.yml  これもディレクトリが存在しないので、testディレクトリ、fixturesディレクトリを作成し、最後にmovies.ymlファイルを作ります(今度は複数形のsをつけます。混同しないようにw)。
one:
  name: 半谷
  title: ソーシャルネットワーク
  body: ザッカーバーグかっこええ!
  password: pass
  
two:
  name: 藤本
  title: forrest gump
  body: いいよね!
  password: password
今作ったymlファイルをDBに読み込ませる
$ rake db:fixtures:load FIXTURES=movies   ←拡張子の.ymlまで入力すると自動的認識しているため、重複して読もうとし、失敗してしまいます。

今作ったものをmysql上で確認します。
rails dbconsole
select * from movies;
exit
indexファイルを書き換える。

movieテーブルを表示させる。
$ vi app/controllers/messages_controller.rb

# coding : utf-8

class MoviesController < ApplicationController
  
  def index
    @movies = Movie.all
  end
end

$ vi app/views/messages/index.html.erb
<table>
  <tr>
    <th>名前</th><th>タイトル</th><th>本文</th><th>編集/削除キー</th>
  </tr>
  
  <% @movies.each do |movie| %>
  
  <tr>
  <td><%= movie.name %></td>
  <td><%= movie.title %></td>
  <td><%= movie.body %></td>
  <td><%= movie.password %></td>
  </tr>
<% end %>  
  </table>

http://localhost/movies にアクセスする。
テーブルの内容が表示されます。
にしても、おれのブログの作り方へたくそやなーw