リソースの ID としてテキスト パーマリンクを使用して、Rails アプリのルート用に RESTful なセットアップを行いました。
さらに、名前付きリソースと重複する特別な名前付きルートもいくつかあります。
# bunch of special URLs for one off views to be exposed, not RESTful
map.connect '/products/specials', :controller => 'products', :action => 'specials'
map.connect '/products/new-in-stock', :controller => 'products', :action => 'new_in_stock'
# the real resource where the products are exposed at
map.resources :products
Product
モデルはpermalink_fuを使用して名前に基づいてパーマリンクを生成しProductsController
、アクセス時にパーマリンク フィールドを検索します。それはすべてうまくいきます。
ただし、データベースに新しいレコードを作成するときに、生成されたパーマリンクが特別な URL と重複していないProduct
ことを検証したいと考えています。
specials
ユーザーがまたはまたはnew-in-stock
のような通常の Rails RESTful リソース メソッドを作成しようとした場合、コントローラーでルーティング構成を検索し、モデル オブジェクトにエラーを設定し、新しいレコードの検証に失敗し、保存しないようにします。new
edit
既知の不正なパーマリンク名のリストをハード コードすることもできますが、その方法では面倒です。ルーティングにフックして自動的に行うことをお勧めします。
(無実を保護し、回答しやすいようにコントローラーとモデルの名前を変更しました。実際の設定はこの例よりも複雑です)