【问题标题】:Using Rails Routes through ERB in a YAML file在 YAML 文件中通过 ERB 使用 Rails 路由
【发布时间】:2011-09-05 19:49:06
【问题描述】:

这真的让我发疯了;我在这上面花了整整两个小时,我就是想不通!我想要做的是在 YAML 文件中使用 ERB 在 YAML 文件中包含 rails 路由。长话短说,稍后将回读以从 YAML 文件中创建语义菜单。我在初始化程序_load_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 %>

问题是&lt;%= url_for hasboard_path %&gt;抛出错误:

(erb):4:in `<main>': undefined local variable or method `dashboard_path' for main:Object (NameError)

从大量调试来看,我认为这是由于在此初始化程序之后加载了路由。非常感谢任何有关如何解决此问题的建议!

附:这是使用 Rails 3.1.rc5

【问题讨论】:

    标签: ruby-on-rails-3 routes yaml ruby-on-rails-3.1 erb


    【解决方案1】:

    您收到该错误的原因是 url_for 是 ActionView 的帮助程序,因此在初始化程序运行时无法访问 - 如果从模型或控制台调用它将无法工作,因此问题不一定是路由在初始化器之后被加载


    我不确定您的仪表板路线是如何设置的,以及为什么它需要动态绑定到menu.yml假设它没有通过 URL 发送任何参数(因为没有 args 被传递到 url_for')并且您使用 match 进行路由: 拥有一个由 @ 引用的全局或环境变量987654324@ 和 menu.yml 可能会提供您需要的功能。

    boot.rb

    require 'rubygems'
    
    DASHBOARD_URL = '/dashboard'
    ...
    

    routes.rb

    match DASHBOARD_URL => 'dashboard#index'
    

    menu.yml

    logged_in:
      dashboard:
        text: "Dashboard"
        url: DASHBOARD_URL
    

    【讨论】:

    • 我没有想到这个!非常感谢!
    猜你喜欢
    • 2013-01-27
    • 1970-01-01
    • 2018-03-20
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-08
    相关资源
    最近更新 更多