如何使用模型activeRecord从数据库添加动态路由:
我尝试:(使用Rails 5)
Rails.application.routes.draw do
router = self
Var.find_by(name: 'pages').value.split(',').each do |page|
router.get "/#{page}", to: 'application#page', as: page
end
end
但是当我尝试启动rails服务器时出现错误:
'mysql2_connection中的救援':未知数据库'dale'(活动记录::NoDatabaseError)
2条答案
按热度按时间f87krz0w1#
您可以移动访问数据库的代码以初始化块。
不能保证你的初始化器会在所有的gem初始化器之后运行,所以任何依赖于给定gem已经初始化的初始化代码都应该进入config.after_initialize块。
Rails有5个初始化事件可以挂接(按运行顺序列出):Rails文档初始化事件中的更多详细信息
5kgi1eie2#
您遇到的问题是因为
Var.find_by(name: 'pages')
正在尝试运行ActiveRecord
查询,但是Rails.application.routes.draw
块是在应用程序启动时和建立数据库连接之前执行的。要解决此问题,可以将定义动态路由的逻辑移到控制器操作中,该操作将在建立数据库连接后运行,然后可以在操作中使用
redirect_to
重定向到适当的路由:通过这种方式,当向
/pages
URL发出请求时,pages操作将运行并基于page参数重定向到适当的路由。希望这能帮上忙。