Настройки приложения Rails - PullRequest
2 голосов
/ 19 мая 2009

Я создаю два связанных приложения на 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 ]

4 голосов
/ 19 мая 2009

Для чего-то такого базового, как имя приложения, плюс много других констант, я объявляю константы в environment.rb

Константы должны использовать функцию констант Ruby, а не переменную класса с аксессором, как предложил markjeee.

Ссылка: стр. 330, "Рубин программирования" (Кирка), 2-е изд.

Larry

2 голосов
/ 19 мая 2009

вы можете поместить их в файл 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 будет интерпретировать его как глобальную константу.

1 голос
/ 19 мая 2009

Определить константы в файле config / environment.rb

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...