Ruby on rails 3 在YAML文件中使用通过ERB的Rails路由
这真的让我发疯了;我花了整整两个小时在这上面,我就是想不出来!我试图做的是在YAML文件中使用ERB在YAML文件中包含rails路由。长话短说这将在稍后被读回,以从YAML文件生成语义菜单。我正在初始化器Ruby on rails 3 在YAML文件中使用通过ERB的Rails路由,ruby-on-rails-3,routes,yaml,ruby-on-rails-3.1,erb,Ruby On Rails 3,Routes,Yaml,Ruby On Rails 3.1,Erb,这真的让我发疯了;我花了整整两个小时在这上面,我就是想不出来!我试图做的是在YAML文件中使用ERB在YAML文件中包含rails路由。长话短说这将在稍后被读回,以从YAML文件生成语义菜单。我正在初始化器\u load\u config.rb中加载YAML文件(带有ERB),加载该文件的代码如下所示: menu_yml= "#{Rails.root}/config/menu.yml" config = YAML.load(ERB.new(IO.read(menu_yml)).result) M
\u load\u config.rb
中加载YAML文件(带有ERB),加载该文件的代码如下所示:
menu_yml= "#{Rails.root}/config/menu.yml"
config = YAML.load(ERB.new(IO.read(menu_yml)).result)
MENU_CONFIG = config
在YAML文件menu.yml
中,我有一些大意:
logged_in:
dashboard:
text: "Dashboard"
url: <%= url_for dashboard_path %>
已登录:
仪表板:
文本:“仪表板”
网址:
问题是
抛出错误:
(erb):4:in `<main>': undefined local variable or method `dashboard_path' for main:Object (NameError)
(erb):4:in`':未定义的局部变量或main:Object的方法“dashboard\u path”(NameError)
通过大量的调试,我推测这是由于在这个初始值设定项之后加载了路由。任何关于如何解决此问题的建议都将不胜感激
另外,这是在使用Rails 3.1.rc5导致此错误的原因是的
url\u是ActionView的助手,因此在初始值设定项运行时无法访问-如果从模型或控制台调用,则无法工作,因此问题不一定是在该初始值设定项之后加载路由
我不确定仪表板路线是如何设置的,以及为什么需要将其动态绑定到menu.yml
。假设它没有通过URL发送任何参数(因为没有参数被传递到URL_for),并且您正在使用match
进行路由:拥有一个由routes.rb
和menu.yml
引用的全局或环境变量可能会提供您需要的功能
boot.rb
require 'rubygems'
DASHBOARD_URL = '/dashboard'
...
match DASHBOARD_URL => 'dashboard#index'
routes.rb
require 'rubygems'
DASHBOARD_URL = '/dashboard'
...
match DASHBOARD_URL => 'dashboard#index'
菜单.yml
logged_in:
dashboard:
text: "Dashboard"
url: DASHBOARD_URL
我没有想到这一点!非常感谢你!