Ruby on Rails
3pt
現在Javaでは、DIのように疎結合ということがひとつのキーワードとして扱われている。これに対し、Ruby on Railsは密結合のウェブフレームワークだという。
http://journal.mycom.co.jp/articles/2005/08/29/lldn/001.html
密結合なフレームワーク。
API
http://railsapi.com/doc/v2.3.2/
テスト
テストデータベースにスキーマをコピー
$ rake db:test:prepare
テスト実行する
$ ruby test/unit/person_test.rb
テスト実行する
$ ruby test/unit/person_test.rb
特定のメソッドのみテスト実行する
$ ruby test/unit/person_test.rb -n test_set_name
fixturesを使う
class PersonTest < ActiveSupport::TestCase def test_set_name person = persons(:one) end end
fixturesはテンプレートの記法と同じく動的に生成できる。
RubyOnRails を使ってみる 【第 6 回】 テストの書き方(あとで読む)
http://jp.rubyist.net/magazine/?0013-RubyOnRails
MでもVでもCでもない、CakePHPでいうコンポーネント的なのはどこに定義すればいいだろう?
→libに入れるとオートロードできるらしい
http://d.hatena.ne.jp/haraguroblog/20081112/1226499124
コード生成
ruby script/generate model user
basic認証のテスト
def test_index @request.env['HTTP_AUTHORIZATION'] = 'Basic ' + Base64::encode64("user:password") get :index assert_response :success end
rake で何ができるか
http://rubist.blog77.fc2.com/blog-entry-50.html
ルーティング
admin/** の場合のルーティング
コンソールで確認する
ruby scripts/console rs = ActionController::Routing::Routes puts rs.routes
フォーム
Railsのフォーム作成メソッドform_tagとform_for
http://d.hatena.ne.jp/willnet/20080705/1215252673
form_for :user, :url => { :action => "update" }, :html => { :method => :put } do |form| # ... end form_for :user, @hoge, :url => { :action => "update" }, :html => { :method => :put } do |form| # ... end
assert_select
http://d.hatena.ne.jp/zariganitosh/20080405/1207455670
inputフィールド username の値が hoge であるかどうか調べる
assert_select input[name=username][value=hoge], :count => 1
セッションを見る
sessions = request.session.dup logger.info " Sessions: #{sessions.inspect}"
ログイン状態をテストする
第3引数でセッションを書き換える
get :index, {}, {:user => users(:admin).id }
なぞのパス
users_path
edit_user_path
ルーティング定義を参照してる?
rhtml erbの違い??
バージョン2.0でerbになったらしい。
それだけ?
Railsでデバッグをする7つの方法
http://blog.s21g.com/articles/212
ActiveRecord::Observer
class UserObserver < ActiveRecord::Observer def after_create(user) end def after_save(user) end end
カラムの追加
ruby script/generate migration AddOperatorIdToUser operator_id:integer
バージョン指定する
rake db:migrate VERSION=**
命名規則
ActionMailerのテスト
なんかしらんがこれでテスト環境でメール送信されなくて、メールがdeliveriesに格納される。
ActionMailer::Base.delivery_method = :test
ActiveRecord使うテスト
saveしたやつはfixturesから取得したオブジェクトは更新されなくて、AR.find()から直接とらないといけない?
→idでオブジェクトを渡したりすると、fixturesとオブジェクトの同期がとれなかったりするのかも
なんちゃら_path よくわからない
.html.erb中のnew_***_pathが無いとか言うエラーが出る場合はconfig/routes.rbを確認
map.resources :***が無い可能性大!
なるほど!
結合の度合いが言語の特性で変わるのは面白いですね。