RESTful / map.resources / Atom

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

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

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

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

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

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

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