デフォルトでは、Rails は RESTful ルートを設定する 2 つの方法を提供します (:id
セグメントは整数制約です/[0-9]/+
)。
1. site.com/users/10/homes/15
2. site.com/user/homes/15
最初のバリアント:
コントローラー:UsersController
およびHomesController
あなたのルート:
resources(:users) do #=> plural, so the url path is /users/10, :id segment possible
resources(:homes) #=> plural, so the url path is /homes/10, :id segment possible
end
2 番目のバリアント:
コントローラー:UsersController
およびHomesController
あなたのルート:
resource(:user) do #=> singular, so the url path is /user, no :id segment
resources(:homes) #=> plural, so the url path is /homes/10, :id segment possible
end
しかし、これらの URL は見栄えがよくありません。私は彼らがこのようになりたい:
site.com/bugsbunny123/homeinny
最初と 2 番目のセグメントは正規表現ですが、まだコントローラーに接続されてUsers
おりHomes
、RESTful です。非リソースフルルートを使用してそれを達成する方法を知っています。:via => POST
しかし、:via => PUT
、:except
などを使用して、それぞれをコントローラーの RESTful メソッドにマップするのは非常に面倒です。
私はこのようなものが欲しい:
:users => /[A-Za-z0-9]+/
resource(:users) do ...
またはこのように:
resource(/[A-Za-z0-9]+/ => :users) do ...
/users/10
アイデアは、デフォルトの RESTful ルーターが現在提供しているハードコーディングの代わりに、regexp ユーザー名を使用することです。
まだ使用して実装することは可能resource(:controller)
ですか? または、非リソース ルートを使用する必要がありますか?