2016-09-14 8 views
0

Wenn ich eine neue Seite erstelle, kann ich sehen, dass sie in der Konsole und in der Datenbank gespeichert ist. Allerdings, wenn ich versuche, die Seite, die ich den Fehler anzuzeigenDie Seite wird erst geladen, wenn eine Datei gespeichert oder der Server neu gestartet wird.

No route matches [GET] "/page-slug" 

diese meine Route-Datei ist, glaube ich, das Gebiet die Page.where.not zu konzentrieren ist ...

Rails.application.routes.draw do 

mount Ckeditor::Engine => '/ckeditor' 

resources :publicpages, only: [:show] 
resources :categories, only: [:show] 
resources :menus, only: [:show] 

namespace :admin do 
    get '/dashboard', to: 'admin#dashboard' 
    resources :menus, except: [:show] 
    resources :pages 
    resources :categories 
end 

Page.where.not("slug" => nil).all.each do |page| 
    get "/#{page.slug}", controller: "pages", action: "show", id: page.id 
end 
end 

Das Routing funktioniert, sobald ich eine Datei speichere oder den Server neu starte. Bis ich eines dieser beiden Dinge mache, wird die Seite weiterhin diesen Fehler auslösen. Irgendwie verwirrt darüber, wie man dieses Problem lösen kann, so dass ich die Seite sofort ansehen kann, ohne eine Datei speichern oder den Server neu starten zu müssen, ich habe dies noch nie zuvor gesehen, jede Hilfe wäre sehr willkommen.

Antwort

1

Ich glaube, Ihr Problem ist, dass Ihre routes.rb nur bei Datei speichern oder Server Neustart neu geladen wird. Das Erstellen einer neuen Seite führt nicht dazu, dass routes.rb neu geladen wird. Daher ist die Route für die neue Seite nicht definiert.

Hier ist ein post auf, wie Sie erreichen, was Sie versuchen. Ich hoffe, es hilft.

0

Ich musste die Routen neu laden wie @jvillian wies darauf hin.

Der obige Kommentar wies mich mit dem Link zum Blogpost in die richtige Richtung. Ich werde diese Antwort nur posten, damit ich zeigen kann, dass der eigentliche Code erstellt werden muss, um das Problem zu lösen.

erstellt dynamic_route.rb models/dynamic_router.rb

class DynamicRouter 
    def self.load 
    Rails.application.routes.draw do 
    Page.all.each do |pg| 
     puts "Routing #{pg.slug}" 
     get "/#{pg.slug}", :to => "pages#show", defaults: { id: pg.id } 
    end 
    end 
end 

def self.reload 
    Rails.application.routes_reloader.reload! 
    end 
end 

In config/routes.rb

DynamicRouter.load 

in der die Seite Modell, Modelle/page.rb

after_save :reload_routes 

def reload_routes 
    DynamicRouter.reload 
end 

Damit kann ich auf die Seite beim Speichern umleiten und es ist bereit zu gehen, genau was ich brauche ed. Danke @jvillian für den Link.

Verwandte Themen