2

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ファイルの1つにありますか?

前もって感謝します

4

3 に答える 3

4

アプリ名と同じくらい基本的なものに加えて、他の多くの定数については、environment.rbで定数を宣言します

定数は、markjeeeが提案したように、アクセサーを持つクラス変数ではなく、Ruby定数機能を使用する必要があります。

Ref:pg 330、 "Programming Ruby"(Pickaxe)2ndEd。

ラリー

于 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 に答える