Разделить переменную между контроллером и помощником в Rails

У меня небольшие проблемы с созданием меню в Rails. В ApplicationController у меня есть метод set_menu:

def self.set_menu(menu, options = {})
  # ...
end

Это вызывается из каждого контроллера следующим образом:

class UsersController < ApplicationController
  set_menu :users

  # ...
end

В set_menu мне нужно создать переменную, которую я позже смогу использовать во вспомогательном методе, чтобы узнать, какой из пунктов меню является активным. Я получил это, используя переменную класса. Это прекрасно работало в разработке, но оказалось, что Rails кэширует эту переменную в продакшене, поэтому активное меню никогда не менялось.

Итак, как мне в set_menu создать переменную, к которой я могу получить доступ из вспомогательного метода, и эта производственная стадия не кэшируется?


person rejeep    schedule 23.11.2009    source источник


Ответы (1)


Переменные экземпляра совместно используются контроллером и представлением, включая помощники.

class ApplicationController

  def self.set_menu(menu, options = {})
    before_filter(options) do |controller|
      controller.send(:set_menu, menu)
    end
  end

  # ...


  protected

    def set_menu(menu)
      @menu = menu
    end

end

# in your view
<%= @menu %>

Если вы хотите создать более сложное навигационное меню, взгляните на мой Tabs On Rails Gem.

person Simone Carletti    schedule 23.11.2009