Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 在YAML文件中使用通过ERB的Rails路由_Ruby On Rails 3_Routes_Yaml_Ruby On Rails 3.1_Erb - Fatal编程技术网

Ruby on rails 3 在YAML文件中使用通过ERB的Rails路由

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

这真的让我发疯了;我花了整整两个小时在这上面,我就是想不出来!我试图做的是在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)
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

我没有想到这一点!非常感谢你!