2

我正在创建两个相关的 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 文件之一中吗?

提前致谢

4

3 回答 3

4

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

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

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

拉里

于 2009-05-19T05:17:55.583 回答
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 会将其解释为全局常量。

于 2009-05-19T05:11:37.180 回答
1

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

于 2009-05-19T07:13:55.897 回答