Rails勉強会@東京第37回
参加してきましたー。
http://wiki.fdiary.net/rails/?RailsMeetingTokyo-0037
忘れないうちに、ブログ書きます。
(いつも後で書こうと思って忘れる)
named_scope熱再び & Rackのコードを読む (id:moro)
named_scope熱再び
id:moro さんが書かれた、named_scope のユーティリティ do_scope scope_do のご紹介。
http://github.com/moro/scope_do/tree/master
- named_acl
- User <-> Blogという関係に、 User#accessible_blogs でアクセス権のあるblogだけを取れるようにする
- chained_scope
- 条件が空だとスキップする scope を作れる。
- Blog.some_scope.title_like(params[:q]).month_in(params[:month]) で、paramsが空の場合はスキップしてblogを取得
- has_children
- x個以上子供を持つというscopeが作れる
- Blog.has_entries(2).active で、2個以上のactiveなblogを取れたり
Rack のコードを読む
アプリケーションとWebServer の間(インタフェース)であるRack の紹介。
ロブスター動かして、
Rack::Handler::WEBrick.run(lambda{[200, {}, "Hello World"]}, :Port => 9292)
で、"Hello World"出してみて、
handler/webrick.rbを追ってみました。
サーバ周りのインタフェースを学習したい時は、
handler 以下の各サーバアダプターを見ると良いとのこと。
月刊 Merb (瀧内元気さん)
Merb についての基本的な所と Rails の script/generate 相当( CRUDを作る辺り )のご紹介。
Merb でプロジェクトを作成
% merb-gen app hoge
サーバ起動
% merb
コンソール起動
% merb -i
コントローラ作成
% merb-gen controller ponyo
script/generate resource hoge みないたの?
% merb-gen resource fuga
- コントローラ,ビュー,モデル,Spec(モデル),ヘルパーを作成
- コントローラ( app/controllers/fugas.rb ) には CRUD でおなじみのアクションももちろん。
- ビュー( app/views/fugas/{edit.html.erb index.html.erb new.html.erb show.html.erb } )の4つが作られるが、中身はほぼ無し
- モデル( app/models/fuga.rb ) 。include DataMapper::Resource
- Spec ( spec/models/fuga_spec.rb )
- ヘルパー ( app/helpers/fugas_helper.rb )
モデル
class Post include DataMapper::Resource property :id, Serial property :title, String property :body, Text has 1, :moges has n, :piyos end
コントローラ, ビュー
def create(fuga) @fuga = Fuga.new(fuga) if @fuga.save redirect resource(@fuga), :message => {:notice => "Fuga was successfully created"} else message[:error] = "Fuga failed to be created" render :new end end
- create, update は基本的に引数を受け取る ( params も使えるよ )
- save メソッドで失敗したら、自分でエラー処理を書く
- save! では、失敗時にエラーは発生しない(save_without_validation らしい)ので、raise 書いたり、上記の様にしてmessage に詰めて表示したり
- message が flash ??
- redirect_to は ridirect
- display ※後で調べる (render?)
- only_provider :xml XML 形式でしか表示しない。(等、指定できる)
- <%= partial :fuga %> Rails の <%= render :partial=>"fuga"%>
春くらいから Rails と統合されていくようです。
今から勉強していても損じゃないですね。