nitsujiの日記 RSSフィード

2007-07-02

コントローラからのモデルの参照 01:22  コントローラからのモデルの参照 - nitsujiの日記 を含むブックマーク はてなブックマーク -  コントローラからのモデルの参照 - nitsujiの日記  コントローラからのモデルの参照 - nitsujiの日記 のブックマークコメント

よくわかってないんだけど、今日気づいたことで。

class StoreController < ApplicationController

  def index
    @products = Product.salable_items
  end

  private

  def find_cart
    session[:cart] ||= Cart.new
  end
end

Railsのこんなコードがあって、おもむろにProduct.salable_itemsとかCart.newとかしてるけどそれを使いますよーって宣言みたいのがどこにもない!

Perl(Catalyst)だとどうか。

package Depot::Controller::Store;

use strict;
use warnings;
use base 'Catalyst::Controller';

sub index : Private {
  my ($self, $c) = @_;
  $c->stash->{products} = $c->model('DBIC::Product')->salable_items;
}

sub find_cart : Private {
  my ($self, $c) = @_;
  $c->session->{cart} ||= $c->model('Cart')->new;
}

こうかな。まあモデルクラスをuseしたりとかはないけど$c->modelを介してモデルクラスアクセスする。

Railsでも裏でこういうことを暗黙的にやってくれてるのかなあ。

それにしてもRubyコードは余分なものがなくてキレイでいいですね。

Perlはuse strict;とか、引数を自分で取ってきたりとか、必ず書かなきゃ行けないコードがあるからゴチャゴチャな印象が。特にこうやって並べてみると顕著にわかる。

---

つーか、こうやって書いてからまた気づくわけだけど、sessionも同じこと言えるし。

本読んでコード書いて一瞬わかった気になるけど、ちょっと突っ込んで考えると途端にわかんなくなるな。

trotrtrotr2007/07/07 14:10RailsはActiveSupportが裏でごにょごにょ

トラックバック - http://rubyist.g.hatena.ne.jp/nitsuji/20070702