abc.com/news?street=2&area=3$price=6
abc.com/news-2-3-6
のparams通り、エリア、価格
にあるすべてのオプションマイルートが好きな設定にしたい
match "/news(-:street-:area-:price)" => "news#index",:as => :news_index
うまく動作しません。
abc.com/news?street=2&area=3$price=6
abc.com/news-2-3-6
のparams通り、エリア、価格
にあるすべてのオプションマイルートが好きな設定にしたい
match "/news(-:street-:area-:price)" => "news#index",:as => :news_index
うまく動作しません。
あなたのルートには2つの技術的な問題があり、私も言及する大きな問題が1つあります。
まず、1つのオプションのセグメント(-:street-:area-:price)
を追加します。これは、すべての用語が表示されるか、または表示されないことを意味します。あなたは、各セグメントはオプションになりたい場合は、この操作を行う必要があります。
match "/news(-:street(-:area(-:price)))" => "news#index"
第二に、あなたは用語の文字それぞれの種類を含有することができる指定していません。あなたの例では、news-2-3-6
は:street
を "2-3-6"に設定し、:area
と:price
は空のままにします。各変数セグメントでどの種類の文字を受け入れるかを経路に伝える必要があります。以下は、それぞれが1桁以上の数字を含むことができます:
match "/news(-:street(-:area(-:price)))" => "news#index",
:street => /\d+/, :area => /\d+/, :price => /\d+/
しかし、これらの修正はどちらも長期的に役立つものではありません。このような「検索」URLは、それぞれのセグメントが前のセグメントの存在に依存するため、実際には悪い考えです。つまり、:price
を:area
となしで指定することは不可能で、:price
を除いて:area
を指定することはできません。 :price
のみを指定する場合、URLは/news-0-0-6
のようになります。
これを行う理由にも根本的に欠陥があります。これはではなく、 SEOです。ハイフンで区切られた数値セグメントを含むURLは、伝統的なクエリ文字列を含むURLよりもであり、SEOではが悪化します。少なくとも従来のクエリ文字列はとprice
のようなインデックス可能な用語を含むのインデックス可能な用語を含みます。
「うまくいかない」どうしたの? – Vache
<%= link_to street.name、params.merge(:street => street)%> 「ニュース?通り= 1」のようなURLを取得します – doabit