【问题标题】:rails 3.1, how to define global constant?rails 3.1,如何定义全局常量?
【发布时间】:2011-11-06 21:37:30
【问题描述】:

我试图在config\environments\development.rb中定义一个常量

NEXT_PAGE_ID = 'next_page'

但是当我尝试在视图中访问它时,我得到了这个错误

未初始化的常量 ActionView::CompiledTemplates::NEXT_PAGE_ID

我尝试在/config/initializers/course_builder 定义它,如下所示:

NEXT_PAGE_ID = 'next_page'

但我遇到了同样的错误。

重新启动服务器没有帮助。我能做什么?

编辑

这是完整的错误:

未初始化的常量 ActionView::CompiledTemplates::NEXT_PAGE_ID

提取的源代码(第 23 行附近):

20:             %></li>
21: 
22:         <li><%= if @page.position < @page.chapter.pages.count then
23:             next_page= Page.find(Page.where(:position => @page.position+1, :chapter_id => @page.chapter.id))
24:             link_to 'Next Page', next_page, {:id=>NEXT_PAGE_ID}
25:             end
26:         %></li>

【问题讨论】:

  • course_buildercourse_builder.rb?
  • 请粘贴完整的错误以及您如何使用 NEXT_PAGE_ID。该错误似乎表明您可能错误地使用了该常量。理想情况下,您应该能够在初始化程序或环境文件中声明一个常量。
  • 好的,完整的错误在上面的问题中。
  • 好吧!就是这样,谢谢 Chowlett,文件应该是 course_builder.rb 而不是 course_builder,我忘了添加扩展名,它现在可以工作了 :-)

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1


【解决方案1】:

我会改用会话变量。在这种情况下(或在大多数情况下)不需要全局变量,而且显然是有问题的。

session[:current_page_id]

或者

session[:next_page_id]

【讨论】:

  • NEXT_PAGE_ID 用于用作“下一页”的 href 的 ID,它始终为“next_page”,它不是记录的 ID。页面 HTML DOM 中的元素是否有更好的命名约定?我仍然无法使用全局常量..
  • 如果它总是那个 ID,那么只需在其中输入那个 ID 而不是担心一个常数......如果你不打算改变这样的小东西,那么没有任何意义配置它。
【解决方案2】:

你可以这样做:

Object.const_set('NEXT_PAGE_ID', 'next_page')

但您可能应该为这些事情使用某种配置文件,而不是污染全局命名空间。

【讨论】:

    猜你喜欢
    • 2011-09-17
    • 2016-05-01
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多