Hi Guido,
also ich hab mir das ganze grad mal angeschaut.
Ich vermute das Problem liegt in folgendem Bereich. Irgendwas stimmt
dort nicht,
so dass die methode delete nicht benutzt wird.
Das ist im Grunde eine korrekte Vermutung. Das Problem ist, dass wenn
man sich den folgenden Code mal genau ansieht und sich dazu überlegt
wie REST funktioniert ...
[:get, :post, :delete, :put].each do |method|
begin
a = ActionController::Routing::Routes.recognize_path(url, :method
=> method)
break
rescue ActionController::RoutingError
end
end
... wird man feststellen, dass IMMER die Route für die 'GET' Methode
gefunden wird und dadurch die Schleife direkt abbricht. Natürlich
unter der Vorraussetzung, dass der Controller RESTful ist und als
Ressource in der 'routes.rb' eingetragen ist.
Warum er dann aber den link nicht anzeigt, weiss ich nicht. Eigentlich
sollte es ihm ja egal sein, denn anzeigen sollte ja wohl jeder User
können (oder auch nicht, keine Ahnung). Das Problem, dass der Link
nicht angezeigt wird, ist auf jeden Fall durch spätere Abfragen
entstanden. Die Abfrage selbst wird dabei aber auf die falsche
Bedingung gemacht - und zwar ob der User die 'show' oder 'index'
Action aufrufen darf.
Im Grunde eine schöne Idee das Routing zu verwenden um an die Action
und den Controller zu kommen, allerdings ist die Implementierung nicht
so einfach wie hier gedacht. Zudem ist das Routing nicht umbedingt der
Teil von Rails, der am schnellsten ist.
In der Regel ist ein Link immer ein GET, außer es wird der ':method'
Key im html_options Hash gesetzt. Wenn dem so ist, sollte auch immer
diese :method genommen werden, denn das war die, für die man
ursprünglich eine Überprüfung der Rechte durchführen wollte.
Diese Zeile reicht dazu schon aus:
ActionController::Routing::Routes.recognize_path(url, :method =>
html_options && html_options[:method] || :get)
Natürlich muss auf die mögliche RoutingError Exception gefangen und
entsprechend behandelt werden.
Hoffe das hilft dir etwas weiter.
greetz
Dirk
_______________________________________________
rubyonrails-ug mailing list
[email protected]
http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug