特集のRuby on Rails入門をやりはじめた。
インストールしてあった、Instant Railsを使う。
環境マニアな私だが、勉強する時は環境に時間をかけないことにしている。
違う方向にずれてしまうから。(笑)デフォルト万歳。
開始
さっそく本に書いてあるとおりコンソールから
rails demo cd demo script/server
サーバーが起動しない。本と少し違うことしてしまった。
そういえば、Instant rails(windows)からはrubyコマンドを打ってからだった。
「焦るなよ」>自分へ
ruby script/server
よし、ブラウザからrailsの動作確認できた。
本の画面がやたら古い。0.13の時はテキストしかでてこないらしい。
次はDBの設定
予め、vimのrubyの設定、rails.vimの設定は既にやってある。
印刷してあった二つのチートシート(これとこれ)をクリアファイルに両面にして、
マウスと反対側に置いてはいおーけー。>ありがたく使用させて頂きます
vimで config/database.ymlを編集。
- コメントは名前を見ればわかるから消しておいた
- パスワード設定
- 他はデフォルトでOK
development: adapter: mysql database: demo_development username: root password: host: localhost test: adapter: mysql database: demo_test username: root password: host: localhost production: adapter: mysql database: demo_production username: root password: host: localhost
はてなのスーパーpre記法(シンタックス・ハイライト)は、ほぼそのまんまvimのsyntaxハイライトの設定と同じだから楽だなぁ。
ここまでで大事そうなこと。
scaffoldをやるらしい
DB設定したら、いきなりscaffoldやるらしい。
いきなり美味しい部分を見せてもらえるわけですね。
では
ruby script/generate sccafold user
また、タイポった。
改めて
ruby script/generate scaffold user
C:\InstantRails\rails_apps\demo>ruby script/generate scaffold user exists app/controllers/ exists app/helpers/ create app/views/users exists app/views/layouts/ exists test/functional/ dependency model exists app/models/ exists test/unit/ exists test/fixtures/ create app/models/user.rb create test/unit/user_test.rb create test/fixtures/users.yml Unknown database 'demo_development'
とりあえず、usersというテーブルがあったとしてという前提らしいです。
手順には書いてなかったので、省きました。
scaffoldはDBが見つからないと言ってくれました。
ソースの閲覧
:Rmodel user
おっ、config/database.ymlからapp/models/user.rbを開いてくれた。
こりゃ便利だ。>rails.vim
class User < ActiveRecord::Base end
よし、続いてコントローラーも見てみるか。
:Rcontroller
app/controllers/users_controllerというファイルがありません
えー。開けない。ファイルがない?
FuzzyFinderで見てみる。>確かにない。
そういえば、railsセミナーで増井さんが言っていた気がする。「railsは随所でデータベースのスキーマーを参照しにいっています」
なるほどDB接続(テーブルがなかった)できなかったから、scaffoldできなかったわけね。
じゃあ、usersテーブルとスキーマを作るよ。はい。
スキーマとテーブル作成
そういえば、WEB + DB PRESSの総集編に3x号までの記事PDFがあったな。
SQLを頂いてくるか。
うぉっ。このPDF参照がすごくしやすい。index.pdf開いてから10秒で(3クリックと数スクロール)で
目的のSQLが書いてあるページが表示できた。今度から勉強する時は、このPDFも必須だな。
▼リスト2 users テーブル
create table users (
id int unsigned not null auto_increment,
name varchar(20) not null,
password varchar(20) not null,
primary key (id)
);
実際は、migrarion使いたいところだけど。我慢。
vimで
phpmyadminでスキーマーをつくり、引用のSQLを流した。
データベース環境完成。
動作検証
さて、もう一回scaffoldを流してみるか。
ruby script/generate scaffold user
exists app/controllers/ exists app/helpers/ exists app/views/users exists app/views/layouts/ exists test/functional/ dependency model exists app/models/ exists test/unit/ exists test/fixtures/ identical app/models/user.rb identical test/unit/user_test.rb identical test/fixtures/users.yml create app/views/users/_form.rhtml create app/views/users/list.rhtml create app/views/users/show.rhtml create app/views/users/new.rhtml create app/views/users/edit.rhtml create app/controllers/users_controller.rb create test/functional/users_controller_test.rb create app/helpers/users_helper.rb create app/views/layouts/users.rhtml create public/stylesheets/scaffold.css
うまくいったみたい。
こんどは、たくさんファイルが出力された。
テストケースもできるわけね。ふむふむ。
よし、rails.vimの威力をみせてくれ。
まずは、
modelを表示した状態で
:Rcontroller
そうすると、パラメータを指定しなくてもモデルに対応するコントローラーを開いてくれるはず。>rails.vimが
class UsersController < ApplicationController def index list render :action => 'list' end # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html) verify :method => :post, :only => [ :destroy, :create, :update ], :redirect_to => { :action => :list } def list @user_pages, @users = paginate :users, :per_page => 10 end def show @user = User.find(params[:id]) end def new @user = User.new end def create @user = User.new(params[:user]) if @user.save flash[:notice] = 'User was successfully created.' redirect_to :action => 'list' else render :action => 'new' end end def edit @user = User.find(params[:id]) end def update @user = User.find(params[:id]) if @user.update_attributes(params[:user]) flash[:notice] = 'User was successfully updated.' redirect_to :action => 'show', :id => @user else render :action => 'edit' end end def destroy User.find(params[:id]).destroy redirect_to :action => 'list' end end
キターっ。scaffoldで生成されたコードが表示された。が、、、それよりもrails.vimが思った通りに
動いてくれたほうがうれしい。(笑)
中でなにをやっているかは、今度やる増井さんのセミナーの復習の時にじっくり見るよ。(勉強会で実施する予定。複数人だとレビューもできる)
これもセミナー増井さんから言われたこと。「ジェネレーターはレベルが高い人が作っている事が多いので、生成されたコードは綺麗かつRuby&Railsらしい書き方がされている確率が高いので、とても参考になると思います。」
しかも、scaffoldは標準のジェネレーターだからなお更という感じでしょうか。
さて、Viewも見たいぞ!。
たしかActionでview名をしている行で、gf(vimで感動したコマンドだ。)をやったら開けるんじゃなかったっけ??>rails.vim
<h1>Listing users</h1> <table> <tr> <% for column in User.content_columns %> <th><%= column.human_name %></th> <% end %> </tr> <% for user in @users %> <tr> <% for column in User.content_columns %> <td><%=h user.send(column.name) %></td> <% end %> <td><%= link_to 'Show', :action => 'show', :id => user %></td> <td><%= link_to 'Edit', :action => 'edit', :id => user %></td> <td><%= link_to 'Destroy', { :action => 'destroy', :id => user }, :confirm => 'Are you sure?', :method => :post %></td> </tr> <% end %> </table> <%= link_to 'Previous page', { :page => @user_pages.current.previous } if @user_pages.current.previous %> <%= link_to 'Next page', { :page => @user_pages.current.next } if @user_pages.current.next %> <br /> <%= link_to 'New user', :action => 'new' %>
viewキター!!
やべぇこれ。
色んなところで、開発効率3倍とか言っている意味が、やってみたらわかった。
viewが表示されたところで、コントローラーに戻りたいので、
:Rcontroller
できた…
vim使っていて良かったよ。今、心底そう思った。
NetbeansとかEclipseもいいが、やっぱvimだね。
Rails開発は基本的にvimにすることにして、RadRailsとNetBeans(GUIIDEでのRails開発)の魅力を探る旅は控えめにしておくことにする。
まだまだrails.vimの機能は山盛りあるし、使ってみたい。
おっと、本の手順を進めないと。
サーバーを起動して、動作確認。
http://localhost:3000/users/
ruby script/server
scaffoldでcrudアプリができた。
最後だ
記事の最後では下記でまとめられている。
モデルジェネレーター実行結果
exists app/models/ exists test/unit/ exists test/fixtures/ identical app/models/user.rb identical test/unit/user_test.rb identical test/fixtures/users.yml create db/migrate create db/migrate/001_create_users.rb
なるほど、modelジェネレーターだとmigrateも生成されるんですね。
記事では特に触れられていなかったので、流します。
コントローラージェネレーター実行結果
exists app/controllers/ exists app/helpers/ create app/views/user exists test/functional/ create app/controllers/user_controller.rb create test/functional/user_controller_test.rb create app/helpers/user_helper.rb
できた。
よし。
第一章完了
道をそれずにそのまんまできた。(rails.vimではあぶなかったけど。)
- 第一章の振り返り(KPT法使うよ)とまとめ。
ぷちKPT
- KEEP【良かった事、続けていきたい事】
- PROBLEM【悪かったこと、改善したい事】
- 焦るな
- タイポ気をつけろ
- 本をよく読め
- TRY【今後取り込みたいこと】
まとめ
- 基本コマンドは簡単に実行できる
- Railsアプリ作るときは、DBも合わせて必ず作ろう
- モデル、コントローラー、ビューは決まった位置に配置される(規約重要)
- モデルの親クラスは、「ActiveRecord::Base」クラス
- コントローラーの親クラスは、「ApplicationController」クラス
- データベースは設定は、config/database.yml
お礼とお願い
最後まで、読んで下さった方ありがとうございました。
コメントに「良かった点・悪かった点・疑問点」などあれば、1言でも何でも構いませんのでご意見いただけたらうれしいです。
KPTに活かしたいです。