2009-04-08 7 views
6

Wenn Sie eine Ressource Karte zu einem Namespace in Ihrem routes.rb in Rails 2.3, fügen Sie, wie Sie link_to machen tun (und form_for, etc.) zu verstehen, dass sie den Namensraum-Controller anstelle eines in die bekommen sollte Root-Namespace?Rails: Korrekte Routing für benannte Ressourcen

Zum Beispiel ...

Vor diesem routes.rb:

map.namespace :admin do |admin| 
    admin.resources :opt_in_users 
end 

Und dies in der Ansicht:

<%= link_to @anOptInUser %> 

Die link_to sollte link_for_admin_opt_in_user verwenden, sondern stattdessen versucht, es zu benutzen link_for_opt_in_user, die fehlschlägt.

Antwort

7

Mit Namespace-Ressourcen, wie mit verschachtelten Ressourcen, können Sie ein Array mit einem Symbol verwenden:

link_to 'Click here', [:admin, @opt_in_user] 

oder

form_for [:admin, @opt_in_user] do |form| .... 
+0

Sie gilt immer noch für Rails 3.1.3. – olistik

2

die Schienen docs für url_for zeigen Sie dies explizit nennen müss:

Wenn Sie anstelle eines Hash einen Datensatz übergeben (wie ein Active Record oder Active Ressourcen) als Optionen Parameter, Sie werden die benannte Route für diese Aufzeichnung auslösen. Die Suche erfolgt unter der Name der Klasse. Wenn Sie also ein Workshop-Objekt übergeben, wird versucht, die workshop_path-Route zu verwenden. Wenn Sie eine verschachtelte Route haben, wie admin_workshop_path, müssen Sie explizit aufrufen (es ist unmöglich für url_for diese Route zu erraten).

(von http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#M001564)

+0

Ja, das ist, was ich tun endete ... Danke für die Bestätigung, es ist die einziger Weg!(Obwohl ich nicht zustimmen würde, ist es * unmöglich * für url_for, die Route zu erraten, wenn es nur eine gibt!) – nevyn

0

Rails ein Array von Objekten aufnehmen kann, die dann abgebildet werden, in eine benannte Route

z.B. <% = link_to @ comment.title, [@article, @comment]%>

Sie finden einen Link zu /articles/@article.to_param/comments/@article.to_param

bekommen Dies kann in form_for und anderen Orten sowie

0

Gebrauch verwendet werden :

link_to '...', admin_opt_in_user_path(@anOptInUser) 

Zum Sammeln:

admin_opt_in_users_path 

Sie können auch Bearbeitungs- und neue Präfixe hinzufügen.

Wenn Sie form_for verwenden, übergeben Sie admin_opt_in_users_path für neue Aktion und admin_opt_in_user_path (@anOptInUser) für die Bearbeitungsaktion.