代码之家  ›  专栏  ›  技术社区  ›  dcw

Rails应用程序设置

  •  2
  • dcw  · 技术社区  · 16 年前

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

    例如, @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 回复  |  直到 16 年前
        1
  •  4
  •   Larry K    16 年前

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

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

    参考:第330页,“编程红宝石”(鹤嘴锄)第二版。

    拉里

        2
  •  2
  •   markjeee    16 年前

    您可以将它们放在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将把它解释为一个全局常量。

        3
  •  1
  •   DannyT    16 年前

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