2011-01-14 3 views
1

ブログやニュースリストがサイトツリーのどこにでも表示できるRails CMSを構築しています。これは、どのページもデータベースフィールドに基づいて型を知っていることを意味します。たとえば、ニュースリーディング型であることをページが認識しているため、そのページが呼び出されるとニュースリスティングコントローラによって処理される必要があります。ニュースリスティングページのサブページはニュース記事です - それぞれに日付とカテゴリがあります。動的URLのパラメータを特定するにはどうすればよいですか?

newslistingへのURLが

/dogs/snoopy-news/ 

かもしれないし、ニュース記事は、私たちのために複雑

/dogs/snoopy-news/snoopy-is-great/ 

かもしれませんが、ニュース記事の日付範囲をリストのために追加のパラメータを持っていたURLを使用することですカテゴリリストなど:

すべての11月のニュース記事を掲載する

/dogs/snoopy-news/2010/11/ 

たり、カテゴリなどの食品を持っているすべてのストーリーリスト:そのnewslistingページは、我々は2010年がパラメータであるか、そのカテゴリであることを特定するアプローチする方法をサイト階層内の任意のレベルである可能性がありますので

/dogs/snoopy-news/category/food/ 

をパラメータ?

EDITは(私たちは、私たちは、ページがURLのために存在するかどうかを確認するために最初のルックアップすることができ、ページごとに、データベース内のすべてのURLを格納します):Dynamic CMS like routes in ruby on rails我々は試してみます。この投稿は、可能な解決策を提供します報告してください。

/dogs/snoopy-news/{year}/{month}/ 

答えて

2

ルートグロビングと制約を使用して、適切なパターンに一致させることができます。

# Rails 2.x 
map.connect "*path/:year/:month", 
      :constraints => {:year => /\d{4}/, :month => /0[1-9]|1[0-2]/ }, 
      :controller => :pages, :action => :month_archive 

# Rails 3.x 
match "*path/:year/:month" => "pages#month_archive", 
      :constraints => {:year => /\d{4}/, :month => /0[1-9]|1[0-2]/ } 

これは/dogs/snoopy-news/2010/11と一致し、paramsハッシュで:path => "dogs/snoopy-news", :year => "2010", :month => "11"を渡します。あらかじめいくつのセグメントがあるかにかかわらず、年と月を最後の2つのセグメントとして持つすべてのルートに一致します。また、最後の2つのセグメントで適切な年と月に一致しないルートを拒否します。 :pathパラメータで何をするかは、コントローラによって異なります。

+0

おかげで非常に有望なのです - 試してみましょう – petenelson

1

あなたのroutes.rbをファイルにこの問題を設定することができます。私たちは可能なパラメータだけでなく、ページ自体のためだけでなく、ためにその時点でのルーティングテーブルにルートを追加するCMS内のページの保存を。

あなたは何も与えてはいけない場合varialbles

 year , date

に設定された値と、対応するコントローラとアクションには、この意志のルートに

 map.connect 'snoopy-news/:year/:date', :controller => 'needed controller', :action => 'needed action'

のような形式

 ../snoopy-news/2010/23
の任意のURLをルートを追加することができ、RAILSますこれをパラメータと見なしてください。

+0

回答をお寄せいただきありがとうございますが、/ snoopy-news /はウェブサイト内の動的ページであり、階層のどのレベルにも表示される可能性があるため、これは機能しません。ユーザーがこのページをCMSで編集して/ snoopy-special-news /と呼び出すと、これは機能しません。私が考えることができる(実装する方法がわからない)唯一の可能な解決策は、そのページが保存され、これを達成するために経路を動的に保存することです。これはうまくいくのでしょうか、より良い、より簡単なアプローチですか? – petenelson

+0

デフォルトのアクションでurl 'dynamic url'を受け取ることができるかもしれません。パラメータを取得し、比較を使用して動的に動的にURLが役立ちますか?この考え方ではあまりよく分かりません。ページが完全に動的であると言うので、私たちは静的ルートを生成することはできません。 – CHID

+0

経路を保存するのが高価な側になる – CHID

関連する問題