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
  • spec , jQuery が標準
  • controller名は、Rails の様に _controller というファイル名は付かない
  • config/init.rb は、Rails の config/enviroment.rb
    • haml を使いたい場合は、 use_template_engine :haml
  • config/router.rb は、Rails の config/routes.rb
  • 認証系のサービスが最初から入っている ( merb/merb-auth/以下 )
  • tasks/merb.thor Thor は Rake の様なもの。引数やオプションも取れる
  • global_helpers.rb に全view で使う helperメソッドは書いていくようだ
サーバ起動
% 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
  • モデルにスキーマを書ける
  • rake db:automigrate するだけで DB に反映される( db:autoupgrade もあります)
    • 普通に migration ファイルを書いて、 db:migrate も出来る
  • has 1 で Rails の has_one
  • has n で Rails の has_many
  • has 2..4 等も書け、2個以上4個以下の関係を持つとか
コントローラ, ビュー
  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 と統合されていくようです。
今から勉強していても損じゃないですね。