2016-09-14 6 views
0

新しいページを作成すると、コンソールとデータベースに保存されていることがわかります。私はエラーファイルが保存されるかサーバーが再起動されるまで、ページは読み込まれません。

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

が、これは私のルートファイルで取得するページを表示しようとすると はしかし、私が集中するエリアを信じるPage.where.notです...

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 

ファイルを保存するかサーバーを再起動するとすぐにルーティングが機能します。私がこれらの2つのことのうちの1つを行うまで、ページはそのエラーをスローし続けます。この問題を解決してファイルを保存したりサーバーを再起動しなくてもすぐにページを表示できるように、どのようにこの問題を解決するかについて困惑したことは、これまでに遭遇したことはありません。

答えて

1

あなたの問題は、routes.rbがファイルの保存またはサーバーの再起動時に再読み込みされているということです。新しいページを作成してもroutes.rbがリロードされないため、新しいページのルートは定義されません。

ここでは、あなたがしようとしていることを達成する方法についてpostです。私はそれが助けて欲しい

0

@jvillianが指摘したようにルートをリロードする必要がありました。

上記のコメントは、ブログのポストへのリンクで正しい方向に私を指摘しました。私はこの回答を投稿するつもりですので、問題を解決するために作成する必要のある実際のコードを表示できます。

作成dynamic_route.rb モデル/ページモデル、モデル/ page.rbで

DynamicRouter.load 

/routes.rbを設定で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 

after_save :reload_routes 

def reload_routes 
    DynamicRouter.reload 
end 

これで、保存時にページにリダイレクトすることができ、準備が整いました。まさに私が必要なものですed。リンクに感謝@ジャビリアン。

関連する問題