2017-10-13 7 views
0

Ich baue eine Galerie auf meiner Website und bekomme ein bisschen mit dem Routing und den damit verbundenen Aktionen in meinen Controllern fest.Rails Routing, Index und Show sind gleich?

Im Prinzip habe ich drei Modelle: Collection, Album und Photo

A Collection Dosenbehälter andere Collection s oder Albums aber nicht beides. Ein Album enthält dann Photo s.

Bei meinem root /gallery Pfad ich Route in die Indexansicht. Dies übergibt eine Liste von Sammlungen, die eine Null-Parent-ID haben, und die Ansicht wird angezeigt. Alles gut und gut.

Nun möchte ich diese Collection-Titel verknüpfen, so dass die ID der Sammlung zurückgegeben wird. An dieser Stelle müsste ich normalerweise den Link-Helfer von "gallery_collection_path" verwenden, aber das würde zur Showansicht führen. In meinem Fall sieht es so aus, als wären die Index- und die Show-Ansicht gleich, bis ich zu einer Sammlung mit Alben komme, in der ich dann in der Album-Index-Ansicht wäre.

Wo ich stecken bleibe ist, wie dies in meiner Routes-Datei zu strukturieren und wie die link_to auf die Collection-Namen aussehen sollte.

Zeit in meiner routes.rb Datei ich habe:

namespace :gallery do 
    get 'collections/:collection_id', to: 'collections#index' 
    root to: 'collections#index' 
    end 

Ich glaube aber nicht ganz das ist recht. Ich habe versucht, url_for zu verwenden, um die URL zu erzeugen, etwa so:

<%= link_to collection.title, url_for(['gallery', 'collections', collection.id]) %>

aber ich bekomme immer folgende Fehlermeldung:

undefined method to_model‘für 71: Fixnum`

Kann mir jemand vielleicht Schieb mich in die richtige Richtung?

Antwort

0
# config/routes.rb 
namespace :gallery do 
    resources :collections, only: [:index, :show] do 
     resources :albums, only: [:show] 
    end 
end 

Und können Sie url Helfer verwenden: Index: gallery_collections_path, gallery_collections_url zeigen: gallery_collection_path(id), gallery_collection_url(id)

Und für Hilfsmethode url_for, können Sie verweisen hier: https://apidock.com/rails/ActionController/Base/url_for

Edit: Wenn Sie brauchen Um Logiken und Ansichten für Album und Sammlungen zu trennen, müssen Sie den Album-Controller definieren und das Routing wie oben festlegen.

+0

Danke, aber was ist, wenn ich zu Alben komme? Welche Aktionen verwende ich? Was ist mit dem Problem, dass die show-Aktion die Indexaktion für eine verschachtelte Sammlung ist? – rctneil

+0

Mit der obigen Konfiguration der Routen ist die Aktion show nicht identisch mit der Aktion index. Aber mit Ihrer Konfiguration 'get' collections /: collection_id ', zu:' collections # index'', wird show action an die index Aktion weitergeleitet. – ninjarails

+0

Ja, aber ein Album kann in einer Reihe von Untersammlungen enthalten sein. Eine Sammlung auf oberster Ebene wird offensichtlich an alle anderen Sammlungen der obersten Ebene zu Index weitergeleitet, aber eine zweite Ebene, um zum Index zu gehen (um alle Sammlungen dort anzuzeigen oder um zu zeigen, wie wir diese Sammlung zeigen. Das ist mein Problem ? – rctneil