2009-07-21 3 views
3

Ich habe eine verschachtelte Route auf einer singulären RessourceRails Nested Route für Singular Ressource

map.resource :account, :controller => "users" do |page| 
    page.resources :feeds 
end 

Ich versuche, eine Form, um eine Feed hinzuzufügen. Ich beginne dies mit ...

<% form_for @feed do |f| %> 
undefined method `feeds_path' for #<ActionView::Base:0x2123174> 

Also versuche ich

<% form_for [current_user,@feed] do |f| %> 
undefined method `user_feeds_path' for #<ActionView::Base:0x20b3e00> 

Ich denke, dass es von „Benutzer“ auf „Konto“, um die Umbenennung fällig ist? So versuchte ich

<% form_for account_feeds_path(@feed) do |f| %> 
`@/account/feeds.%23%3Cfeed:0x22ea5c0%3E' is not allowed as an instance variable name 

Nicht sicher, was dieser Fehler bedeutet. Also habe ich verwendet, dies zu tun, was funktioniert:

<% form_for @feed, :url=>{:action=>:create} do |f| %> 

Ist das wirklich der beste Weg? Mit anderen Worten, gibt es keine Möglichkeit, in dieser Situation benannte Routen zu verwenden?

+1

Versuchen Sie, 'Rake-Routen' auszuführen und sehen Sie sich Feeds an. – Scott

Antwort

1

Ich denke, Sie sind hier verwirrt über verschachtelte (+ benannte) Routen und einzelne Ressourcen. Ich vermute, dass das, was Sie zu tun versuchen, ist eine einzigartige feed Ressource, die zu einem Benutzer (Konto) gehört, oder?

Wenn ja, werden die vorhandenen Routen

map.resource :account, :controller => "users" do |page| 
    page.resources :feeds 
end 

vielleicht

map.resources :accounts, :controller => "users" do |account| 
    account.resource :feed 
end 

Beachten Sie, dass accounts sind mehrere Ressourcen sein sollte, aber das Futter ist einzigartig. Das gibt Ihnen die üblichen RESTful-Routen auf Ihren Konten (d. H. Ihre Benutzer) ... aber eine singuläre Feed-Ressource. Sie müssen nicht auf die ID Ihres Feeds verweisen - aber normalerweise arbeiten Sie einfach über das @ account.feed

Verwenden Sie rake routes, um Ihnen die vollständige Liste der Routen anzuzeigen, die dies erstellt.

account_feed_path(@account), zum Beispiel gibt Ihnen die Show-Seite für einen Feed.

Die Wege geben Ihnen daher die Möglichkeit, Formular-Helfer zu verwenden wie so:

<% form_for :feed, account_feed_path(@account) do |f| %> 

<% end %> 
+0

Danke für die Antwort. Eigentlich versuche ich das Gegenteil zu tun. Jeder Benutzer hat ein Konto, kann jedoch mehrere Feeds haben. So ist der Account einzigartig, der Feed Plural (oder wie auch immer er heißt). Du hast recht damit klargestellt, dass meine Route auch zu tho heißt. Wenn Sie irgendwelche Ideen basierend auf dieser neuen Informationen haben, würde ich es zu schätzen wissen, danke! –

+0

Also haben Sie ein Benutzermodell UND ein Account-Modell? oder sind sie das Gleiche? – mylescarrick

+0

Nur ein Benutzermodell. Ich habe die Route von einem AuthLogic-Tutorial kopiert ... Ich denke, der Grund dafür ist, dass wenn ein Benutzer eingeloggt ist, er sie wie eine einzelne Ressource behandelt ... sie haben nur einen "Account" (der wirklich nur editiert) ihr eigenes Benutzermodell).Während ein Administrator normale "Benutzer" -Routen verwenden könnte, da sie Listen aller Benutzer usw. sehen können. Jedenfalls bin ich nicht mit der Idee verheiratet, wenn es einen guten Grund gibt, nicht zu ... nur gedacht, dass es einen einfacheren Weg geben sollte Routen auch in dieser Situation zu benutzen. Danke noch einmal! –

5

Ich denke, was Sie tun möchten, ist

<% form_for [:account, @feed] do |f| %> 

form_for dann schauen die account_feeds_path mit POST verwenden Wenn @feed ein neuer Datensatz und ein Konto_Zufuhrpfad (@feed) mit PUT ist, wenn @feed kein neuer Datensatz ist.

Verwandte Themen