0

「/」を区切り記号として使用してルートを一致させるのは非常に簡単に思えますが、ハイフンを使用して一致させたいと思います。唯一の問題は、ID の前に表示したい動的テキストにハイフンが含まれている可能性があることです。

フォーマット: http://www.cities.com/ - 例: http://www.cities.com/los-angeles-california-123

match '/:description-:id' => 'cities#show' は機能しません。これは、:description テキストに ID が含まれている可能性があるためです。

この形式に一致させる方法はありますか? 私はこれを .NET で Regex を使用して行ったことがありますが、Ruby 開発者としての新しい生活を愛しています。

ありがとう!

4

1 に答える 1

0

これにはルートを使用しないでください。単に param :id を渡し、コントローラーで分割します。例えば City.find param[:id].split('-').last

to_paramさらに重要なことは、モデルでオーバーライドして適切な ulr を生成できることを確認することです。

def to_param
  "#{self.name.split(' ').join('-')}-#{self.id}" # FIXME need extra sanity checks
end

最後の 1 つのトリックは、最後の引数として id が必要でない限り、最初に配置することをお勧めします。たとえば123-los-angeles、この方法では、コントローラーで id を「解析」する必要がなく、すぐに使用Model.find '123-los-angeles'できます。

乾杯、

于 2013-05-21T01:13:44.673 に答える