我正在创建两个相关的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文件中的一个吗?
提前致谢
答案 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文件中定义常量