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

Antwort per Email an