Rails应用程序设置

时间:2009-05-19 05:03:47

标签: ruby-on-rails controller settings

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

提前致谢

3 个答案:

答案 0 :(得分:4)

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

常量应该使用Ruby常量功能,而不是带有访问器的类变量,如markjeee建议的那样。

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

拉​​里

答案 1 :(得分: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会将其解释为全局常量。

答案 2 :(得分:1)

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