2011-06-19 21 views
8

ここで、または他の場所でリソースのルートを制限し、Rails 3以外のルートを追加することはできませんでした。私が遭遇したすべての事例または説明は、同時に1つのケースのみを扱うものではありません。リソースルートを制限し、Rails 3以外のREST以外のルートを追加する

ここで私はRailsの2で何をしてきたの例です:

map.resources :sessions, :only => [:new, :create, :destroy], :member => {:recovery => :get}

かなり簡単、他の人がこのためにどんな意味がありませんので、我々は唯一の7つのRESTfulなルートの3が欲しいですアカウントリカバリに使用される別のルートも追加したいと考えています。今

私はどちらかやってこれらの事の一つは、同様に非常に簡単です集めるものとは:

resources :sessions, :only => [:new, :create, :destroy]

ただ、Railsの2等において:

だから、
resources :sessions do 
    member do 
    get :recovery 
    end 
end 

、私はどのように行いますこれら二つを組み合わせる?これを行う古いRails 2の方法を引き続き使用できますか? Rails 3でこれを行う方法がありますか?

resources :sessions, :only => [:new, :create, :destroy] do 
    get :recovery, :on => :member 
end 

をそしてrake routesでそれをテスト:

答えて

15

あなたはresourcesに引数とブロックを渡すことができます。

+0

マイ 'routes.rb'を宣言'リソース:事、:のみ=> [:ショー]:FOO、:=>上:取得んメンバーend'を、そして 'routes'は' foo_thingを与える熊手GET /thing/foo(.:format)thing#foo'プラス 'thing GET /thing(.:format)thing#show'です。 'thing'へのリンクは動作しますが、コードが' foo_thing'をリンクするようにナビゲートすると、 ''ルート入力ができません 'と表示されます。 ../ thing/foo'をURLバーに入力すると動作します。 (パス 'foo_thing'は、' routes.rb'に 'get 'foo_thing' => 'thing#foo''という行がある場合のみ、コード内から動作します)。私が間違っていることに関するアイデアは? –

+0

私は上記の私の質問に拡大し、[この質問を書いた](http://stackoverflow.com/questions/17597382/helper-path-generated-by-rails-based-on-a-custom-rest-method-fails) )、あなたは答えがあれば、それに行ってください。 Kthxbye。 –

5

それはこの

resources :sessions, :only => [:new, :create, :destroy] do 
    member do 
    get :recovery 
    end 
end 

のようにかなりの作業をしなければならないcoreywardによって提案されているように、さらに短い方法があります。

レールガイド「Rails Routing from the Outside In」を確認してください。 Obie Fernandezの "The Rails 3 Way"もお勧めします。これは、Routing and Restについて2つのかなり良い章があります。

乾杯

+0

あなたは "リソース"にタイプミスがあります。 ;) – coreyward

+0

最初の行の最後に 'do'の前にカンマを削除してください。これは正しいでしょう。 –