Techioz Blog

Ruby on Rails、コントローラーにリダイレクトせずに別のページをレンダリングさせる方法は?

概要

次のページがあるとします。 クリップ/ショー/111 画像/ショー/222 サウンド/ショー/333 ここで、111,222 と 333 はさまざまな投稿の ID です。

IDを検出して適切なコントローラーにリダイレクトする「show」という新しいコントローラーを開発しました。 show/show/111 は、clip/show/111 などにリダイレクトされます。

私が望むのは、リダイレクトせずにページ Clip/show/111 をレンダリングすることです。つまり、ブラウザ上の URL には「show/show/111」と表示されますが、実際には「clip/show/111」がレンダリングされます。

どうすればそんなことができるでしょうか?

皆さんありがとう ワエル

解決策

実際にやろうとしているのは、ルートの一部にエイリアスを作成して、異なる URL 構造から同じ機能にアクセスできるようにすることのようです。その場合、すべての作業を別のコントローラーに委任するコントローラー全体を作成することは、コード臭 (機能羨望) になります。

おそらくあなたがやりたいことは、単に同じ Clip コントローラを再利用する “show/” の追加のルートを定義することです。これは、次の操作を行うだけで実現できます。

# routes.rb
# ...
# For Rails 2
map.resources "show", :controller => "clip"

# For Rails 3
resources "show", :controller => "clip"