RESTful / map.resources / Atom

せっかくなのでURI関係全見直しをかけると同時に、冗長なコントローラーコードはモデルに持って行く活動。コントローラーのコードをモデルに移すことでテストがしやすくなる、というのもあり。

とりあえず、/pages/{action}/{id} ではなく、/pages/{id} でアクセスできるようにしようかと思って、map.resources の使い方をみていたら、脇道にそれて、AtomFeedを作ろう、という話になって、index.atom.builderを書いたものの、「登録されているページの中で自分が閲覧することのできるページを更新順に」というクエリの実行方法に悩む。

自分が閲覧することができる、の条件が、

  • ページの所有者がアクセス制御をかけていない場合で、匿名ユーザーも含めて公開
  • ページの所有者がアクセス制御をかけていた場合に

- ページの所有者と友人関係にある
- すべての友人関係にのみ公開
- R1 というタグのついた友人関係にのみ公開
- ページの所有者と友人関係にない
- サイトに登録したユーザーにのみ公開

なのですが、まともに実装すると、5発ぐらいSQL文をとばさないといけないので躊躇してしまいます。というかSQL文の書き方がわからないので、Rubyコードで実装したら、5発飛んでいた、というだけなのですが。かつフィルタ処理がRubyコードになるので遅い遅い。

以前考えてあきらめた気がするのですが、せっかくなので再考。ポリモーフィズムでDB使うとろくなことがない、という例か。。

Fixtures as a initial data.

昨日の続きで、Fixtureの問題。どうも、load_fixtures を再定義して、その中で自作でcreate_fixturesをしているのが非常に問題のようで、これを解決するには、fixture.rb を最初から最後まで舐め回す根性が必要そう。


で、ふと思いついたのは、Fixtureって、ERBなんだから、<% if RAILS_ENV == "test" %> とかできるんじゃないか?と思った件。

続きを読む

[Rails 2.0] Time#to_s(:sym) と Ruby RSS の Time の不整合

こんなところで嵌るとは。

Rails 2.0 では Date, Timeのオブジェクトに対してTime#to_s(:db)のような形でデータベースに特化したフォーマットの文字列を取得することができるようになっているようだ。

で、これが、RSS::Rss::Channel:Item#date の Timeクラスとの相性が悪い。

続きを読む

rake test:units completed.

とりあえず rake test:units は完了したので、rake rails:update をかけてboot.rb やほかのJavaScriptなどもアップデートしました。
次はfunctionalなんだけれど、多くの機能はJavaScriptで実装しているから大変なんだな、これが。