当我创建新页面时,我可以看到它保存在控制台和数据库中。 但是,当我尝试查看页面时,我收到错误
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
只要保存任何文件或重新启动服务器,路由就会起作用。在我做这两件事之一之前,页面将继续抛出该错误。有点困惑如何解决这个问题,以便我可以立即查看页面,而无需保存文件或重新启动服务器,我以前从未遇到过这种情况,任何帮助将不胜感激。
答案 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的链接。