initialize
используется внутри Rails для инициализации нового экземпляра вашего контроллера, чтобы он мог затем обрабатывать запросы к нему.Определяя этот метод именно таким образом, вы ломаете Rails .
Есть выход!Свет в конце туннеля.Горшок с золотом в конце радуги:
def initialize
@title = "Admins"
super
end
Видите этот маленький super
звонок там?Это вызовет метод initialize
суперкласса, делающий в точности то, что Rails сделал бы в противном случае.Теперь, когда мы рассмотрели, как это сделать вашим способом, давайте рассмотрим, как это сделать "1013 *" официально санкционированным "способом Rails :
class AdminsController < ApplicationController
before_filter :set_title
# your actions go here
private
def set_title
@title = "Title"
end
end
Да,это немного больше кода, но это приведет к меньшему разочарованию со стороны других, которые смотрят на ваш код.Это обычный способ сделать это, и я настоятельно рекомендую придерживаться следующих соглашений, а не делать «магию».
РЕДАКТИРОВАТЬ: Если вы используете Rails 5, вам нужно будет использовать before_action
вместо before_filter
.