【问题标题】:Rails application settingsRails 应用程序设置
【发布时间】:2009-05-19 05:03:47
【问题描述】:

我正在创建两个相关的 Rails 应用程序,我注意到很多非 DRY 工作。

例如,在各种控制器方法中设置的 @title 字段做同样的事情,除了应用程序标题,如下所示:

# SiteController (application 'Abc')
def SiteController < ApplicationController
  def index
    @title = 'Abc'
  end
  def about
    @title = 'about Abc'
  end
  def news
    @title = 'Abc news'
  end
  def contact
    @title = 'contact Abc'
  end
end

和:

# SiteController (application 'Xyz')
def SiteController < ApplicationController
  def index
    @title = 'Xyz'
  end
  def about
    @title = 'about Xyz'
  end
  def news
    @title = 'Xyz news'
  end
  def contact
    @title = 'contact Xyz'
  end
end

我想做的是有类似的东西

# SiteController
def SiteController < ApplicationController
  def index
    @title = "#{ApplicationTitle}'
  end
  def about
    @title = "about #{ApplicationTitle}"
  end
  def news
    @title = "#{ApplicationTitle} news"
  end
  def contact
    @title = "contact #{ApplicationTitle}"
  end
end

我想弄清楚的是:应该在哪里定义不变的应用程序设置。它在 config/*rb 文件中吗?它在 .yaml 文件之一中吗?

提前致谢

【问题讨论】:

    标签: ruby-on-rails controller settings


    【解决方案1】:

    对于像应用程序名称这样基本的东西,以及许多其他常量,我在 environment.rb 中声明了这些常量

    常量应该使用 Ruby 常量特性,而不是 markjeee 建议的带有访问器的类变量。

    参考:第 330 页,“Ruby 编程”(Pickaxe)第 2 版。

    拉里

    【讨论】:

    • 谢谢。我打算让它成为一个常数,但不确定 environment.rb (或其他任何地方,就此而言)。
    【解决方案2】:

    您可以将它们放在 app/controllers/application.rb 文件中。

    例如:

    class ApplicationController < ActionController::Base
      attr_accessor :application_title
    
      def initialize
        self.application_title = "Some application title"
      end
    end
    

    然后在您的控制器中,您可以通过以下方式访问标题:

    class SomeController < ApplicationController
      def some_action
        @title = "some text with #{application_title}"
      end
    end
    

    您还可以将应用程序标题声明为辅助方法,以便在您的视图中访问它。

    您也可以使用全局常量,并将其放在您的 config/environment.rb 文件中。把它放在 environment.rb 的最底部,在配置块之外,像这样:

    APPLICATION_TITLE = "Some title here"
    

    然后在您在控制器中设置@title 实例变量时使用该常量。请注意,它必须全部大写,因此 Ruby 会将其解释为全局常量。

    【讨论】:

    • 谢谢。我知道 ApplicationController 之一,但不确定 environment.rb
    【解决方案3】:

    在 config/environment.rb 文件中定义常量

    【讨论】:

      猜你喜欢
      • 2011-02-23
      • 2013-02-12
      • 1970-01-01
      • 1970-01-01
      • 2015-05-19
      • 2012-07-28
      • 1970-01-01
      • 2020-06-17
      • 1970-01-01
      相关资源
      最近更新 更多