RoR делает переменную доступной для application.html.erb, чтобы она была во всех представлениях заголовка - PullRequest
6 голосов
/ 03 августа 2011

У меня есть переменная, к которой я хочу получить доступ в своем application.html.erb, чтобы она была доступна для всех представлений.Я знаю, что могу войти и добавить его в каждый контроллер и добавить в каждую функцию, чтобы он был доступен для индексации, показа и т. Д. Однако это безумие.Если я хочу, чтобы он был в заголовке, я должен иметь доступ к нему в файле application.html.erb, чтобы он был во всех моих представлениях.Пример одного из моих контроллеров, в котором он работает ...

     def index
    if session[:car_info_id]
      @current_car_name = current_car.name
    end

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @miles }
    end
  end

Вот моя функция в applicationcontroller:

  private   

  def current_car
    CarInfo.find(session[:car_info_id])
  end

Если я пытаюсь добавить @current_car_name = current_car.nameк моему applicationcontroller, так что переменная доступна для моего application.html.erb, он бомбит с ошибкой Routing to current_car.Я знаю, что функция работает, потому что, если я вызываю ее в другом контроллере, она работает нормально, и я могу получить доступ к переменной, созданной в этом представлении индекса, или как угодно.Просто нужно знать, как вызвать функцию один раз и иметь переменную, доступную для всех представлений, так как она будет в моем заголовке.Я мог бы поместить информацию в переменную сеанса, но я где-то читал, что вы должны ограничить переменные сеанса идентификаторами и генерировать другую необходимую информацию из этих идентификаторов.

Заранее спасибо,

1 Ответ

11 голосов
/ 03 августа 2011

Просто добавьте такую ​​строку в файл application_controller.rb, и у вас будет доступ к current_car в ваших представлениях.

helper_method :current_car

Если вы действительно хотите переменную экземпляра, вы можете поставить before_filter в вашей заявке следующим образом.Тогда и ваши контроллеры, и представления будут иметь доступ к переменной @current_car.

class ApplicationController < ActionController::Base
  before_filter :get_current_car
  def get_current_car
    @current_car = CarInfo.find(session[:car_info_id])
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...