RESTful / map.resources / Atom
せっかくなのでURI関係全見直しをかけると同時に、冗長なコントローラーコードはモデルに持って行く活動。コントローラーのコードをモデルに移すことでテストがしやすくなる、というのもあり。
とりあえず、/pages/{action}/{id} ではなく、/pages/{id} でアクセスできるようにしようかと思って、map.resources の使い方をみていたら、脇道にそれて、AtomFeedを作ろう、という話になって、index.atom.builderを書いたものの、「登録されているページの中で自分が閲覧することのできるページを更新順に」というクエリの実行方法に悩む。
自分が閲覧することができる、の条件が、
- ページの所有者がアクセス制御をかけていない場合で、匿名ユーザーも含めて公開
- ページの所有者がアクセス制御をかけていた場合に
- ページの所有者と友人関係にある
- すべての友人関係にのみ公開
- R1 というタグのついた友人関係にのみ公開
- ページの所有者と友人関係にない
- サイトに登録したユーザーにのみ公開
なのですが、まともに実装すると、5発ぐらいSQL文をとばさないといけないので躊躇してしまいます。というかSQL文の書き方がわからないので、Rubyコードで実装したら、5発飛んでいた、というだけなのですが。かつフィルタ処理がRubyコードになるので遅い遅い。
以前考えてあきらめた気がするのですが、せっかくなので再考。ポリモーフィズムでDB使うとろくなことがない、という例か。。