2016-12-10 25 views
0

Es tut mir leid, mein Englisch ist schlecht. Frage: Ich habe Modell Seiten mit Spalten Titel, Beschreibung usw. Ich kann diese Seiten erstellen, ändern, zerstören. Ich kann den Inhalt des Links mydomain/pages/1 sehen. Ich brauche für jede Seite Vorlage und Route, damit ich den Inhalt auf dem Link sehen kann, zum Beispiel maydomain/contacts. Wie es geht? Hilf mir bitte.Ruby on Rails Seitensteuerung

+1

Vielleicht möchten Sie sich den [friendly_id] (https://github.com/norman/friendly_id) Edelstein ansehen. – spickermann

Antwort

0

Eine Möglichkeit, Ihre eigene Lösung zu implementieren, ist diese Datei auf Ihren Routen hinzuzufügen:

get '/mydomain/:slug, to: 'pages#show'

Dies ist eine ziemlich allgemeine Matcher, so dass es an der Unterseite der Routen hinzufügen, damit es nicht der Fall ist überschreiben andere.

Dann Aktion des Controllers Show wird etwas wie folgt aussehen:

def show 
    @page = Page.find_by_slug(params[:slug]) 
end 

Diese natürlich vorausgesetzt, dass Sie eine Schnecke Spalte auf Ihrer Seiten Tisch.

0

ich mit „mydomain“ gehe davon aus Sie die Root-URL Ihrer Website bedeuten (zB myapp.example.com)

Ich würde vorschlagen, dass Sie das Problem in zwei Teile trennen:

  1. Verwenden Sie ein anderes Attribut als ID, um ein Element in der URL zu identifizieren
  2. Reduzieren Sie die Route, sodass der Controller nicht angegeben werden muss.

Für 1, haben einen Blick auf diese: Rails routes with :name instead of :id url parameters Beachten Sie, dass als @spickermann friendly_id schlägt vor, für Sie eine gute Lösung sein könnte.

Für 2 müssen Sie eine Route ohne den Namen des Controllers erstellen und dann den Controller in der Routendefinition angeben. (Siehe Rails Routing Guide):

get ':param', to: :show, controller: 'pages' 

Damit das funktioniert, müssen Sie es nach (unten in routes.rb) setzen, so dass es nicht mit anderen Strecken nicht intefer. Ich würde auch empfehlen adding a constraint to the route - die falschen URLs zu begrenzen, die zu diesem Router geroutet werden könnten.