Rails:如何将值存储在一个位置并在其他位置引用它

时间:2013-02-14 03:01:12

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

我想在一个地方(比如一个常量)存储一个值,比如我的应用程序的名称,然后在我的应用程序中引用它。因此,如果我需要进行全局更改,我可以在一个地方创建它它会在我的应用程序中更新。以下是关于如何使其发挥作用的一个想法:

在常量文件中
APPLICATION_NAME = "FuzzyOnions"

在任何视图中,我现在可以像这样引用它:
您会喜欢使用<%= Constants::APPLICATION_NAME %>应用程序。

我遇到的问题是当我尝试在以下位置引用它时:<% @page_title = "<%= Constants::APPLICATION_NAME %> / About" %> rails抛出错误。如果我尝试在%= link_to 'Contact Us <%= Constants::APPLICATION_NAME %>', page_path("contact-us") %>

等链接中引用常量,它也会引发错误

是否有另一种方法可以引用一个不会在这些实例中引发错误的常量?有没有更好的方法来完成我想要开始做的事情?

2 个答案:

答案 0 :(得分:2)

<% @page_title = "<%= Constants<::APPLICATION_NAME %> / About" %> 

应该是

<% @page_title = Constants::APPLICATION_NAME + " / About" %> 

<%= link_to 'Contact Us <%= Constants::APPLICATION_NAME %>', page_path("contact-us") %>

应该是

<%= link_to 'Contact Us '+ Constants::APPLICATION_NAME, page_path("contact-us") %>

答案 1 :(得分:0)

在application.rb中有一个名为YourAppName的模块(无论是什么) 这可能有效:

module YourAppName
  class << self
      def [] s
      constants[s]
    end
    def constants
      # you could read this in as a yaml file, cache in a class var, etc.
      {application_name: 'Fuzzy Onions',
       url: 'fuzzy-onions.com'} 
    end




 YourAppName[:application_name]
 => "Fuzzy Onions"  

 AbServ[:url]
 => "fuzzy-onions.com"