在保存任何文件或重新启动服务器之前,页面将不会加载

时间:2016-09-14 16:40:20

标签: ruby-on-rails

当我创建新页面时,我可以看到它保存在控制台和数据库中。 但是,当我尝试查看页面时,我收到错误

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 个答案:

答案 0 :(得分:1)

我相信您的问题是您的select v.Consultant, sum(a.marketing_fee) from valuations v join status_history sh on sh.ref = v.Ref join user on user.username = v.Consultant join answer a on a.title = v.Ref where sh.status = 'booked' and sh.date between '2016-09-07 23:59:00' and '2016-09-14 23:59:00' group by v.Consultant; 只会在文件保存或服务器重启时重新加载。创建新页面不会导致routes.rb重新加载,因此未定义新页面的路由。

这是关于如何完成你正在尝试的内容的post。我希望它有所帮助。

答案 1 :(得分:0)

我需要像@jvillian指出的那样重新加载路线。

上面的评论指出我正确的方向与博客文章的链接。我将仅发布此答案,以便我可以显示我需要创建的实际代码来解决问题。

创建了dynamic_route.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

在config / routes.rb

DynamicRouter.load

在页面模型中,models / page.rb

after_save :reload_routes

def reload_routes
  DynamicRouter.reload
end

有了这个,我可以在保存时重定向到页面,它已准备就绪,正是我所需要的。感谢@jvillian的链接。