2008年01月24日

moduleかcontrollerを継承かもしくは

少し前にも書いた問題ですが、今日また出てきたのでちょっと考えてみる。

シチュエーション
・複数のコントローラが共通して受け取るパラメータがある。
・そのパラメータは省略可能で、省略された時は全コントローラ共通のデフォルト値を使う

このパラメータの処理をすべてのコントローラに書くのはDryじゃないので何とかしたい

解法1:パラメータをパースするスーパークラスを作る
これでやってたんだけど、Javaで考えたらありえない。「共通の機能を使いたいだけで継承使うのは…」といわれてハッと気づいた。

解法2:moduleを作る
個人的にはこのアプローチはあまり好きじゃない。moduleの中でparamsというコントローラ固有の変数をいじらなきゃいけないから。controllersディレクトリに入れればいいだろうというのもわかるけど。

解法3:Filterを作る
言われてみればこれが一番いい気がしてきた。フィルターがパラメータを触るのは当然だし、コントローラへの影響が一番小さい。

なんか、railsは動いちゃうからいろいろなことを考えずに作る癖がついてしまったかも。(railsのせいにするのはおかしいけど)
というわけで、もうちょい落ち着いて考えるようにしよう。
posted by kenchan at 16:13| Comment(0) | TrackBack(0) | Rails | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

この記事へのトラックバックURL
http://blog.seesaa.jp/tb/80390691

この記事へのトラックバック