2010-06-08 14 views
11

In Schienen 2 können Sie die Option: any verwenden, um eine benutzerdefinierte Route zu definieren, die auf jede Anfrage, z.: beliebige Option für Schienen 3 Routen

map.resources :items, :member => {:erase => :any} 

Schienen 3 scheint nicht das zu unterstützen: eine Option

resources :items do 
    get :erase, :on => :member # works 
    any :erase, :on => :member # doesn't work 
end 

Wer weiß, ob diese Option entfernt wurde oder einfach nur umbenannt?

Antwort

12

Ab etwa graben und zu sehen, was die get, post, put und delete Aktionen in ActionDispatch tatsächlich tun, Ich denke alles, was Sie tun müssen, match ist. Also:

resources :items do 
    get :erase, :on => :member 
    match :erase, :on => :member 
end 

Ich glaube nicht, dass Syntax für Spiel tatsächlich dokumentiert, aber die Routen sie Konstrukte sind, atleast für mich, was man von einem all Verfahren erwarten würde

+0

Zusätzlich können Sie (angeblich) Methoden mit der folgenden angeben: via specification (: via => [: any,: get,: put,: post,: löschen]); Soweit ich das beurteilen kann, funktioniert alles nicht (seltsamerweise scheint NULL, obwohl die Routing-Tabelle dann eine leere anstelle von ANY zeigt), aber auslassen: über entspricht: any. – Asher

+0

das funktioniert für mich – Anand

+0

Es funktioniert auch für mich. – Arun

0

Spiel funktionieren wird, aber leider nicht innerhalb einer Ressourcendefinition. Ich wünschte eher, sie würden einen Weg zurückbringen, um zumindest gemeinsam Get/Post zu definieren.

+0

Hmm? Es funktionierte gut für mich innerhalb des Ressourcenblocks. Mit Rails 3.0.0.beta4 –

+1

Aah - mein Problem war: on =>: Mitglied. Ich habe meinen Ressourcennamen verwendet (: on =>: item). Die Fehlermeldung ist anscheinend nicht sehr gut .. "/Library/Ruby/Gems/1.8/gems/actionpack-3.0.0.beta4/lib/action_dispatch/routing/mapper.rb:738:in' übereinstimmen ': kann Route nicht direkt im Ressourcenbereich definieren (ArgumentError) " – Kevin