Как динамически добавить маршрут к ресурсу с определенными областями в Rails3?

Сейчас я пытаюсь обобщить часть своего кода. Пока все прошло хорошо, я написал несколько миксов, которые я могу динамически добавлять в контроллеры или модели, чтобы добиться цели, подчиняясь СУХОЙ.

Но с моим "Searchform-Helper" я попал в угол, в котором, прямо сейчас, я немного невежественен.

У меня есть mixin 'SearchIndexController', который добавляет методы, необходимые для поиска данных в таблице searchindex.

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

def init_searchaction(object, name=nil)
  singular = object.to_s.classify
  plural   = singular.pluralize
  name = "search_#{singular}".to_sym if name.nil?

  unless self.respond_to?(name)
    define_method(name) do
      # init
      success=false

      #TODO 
      # >>> DRAW NEW ROUTE TO THIS ACTION <<<

      # evaluate searchform input for Searchindex-Call
      needle = params[:query]

      success, x, notice = execute_search("#{singular}", needle)
      # send selected/filtered data to page
      respond_to do |format|
        format.js {
          render :update do |page|
            page.call "sidx_updateSearchResultContentAtIdTag", "##{plural.downcase} tbody", "#{render x}" if success
            page.call "sidx_updateNotice", success, "#{notice}"
            page.call "sidx_stopSpinner"
          end
        }
      end
    end
  else
    logger.warn("#{__FILE__}:#{__LINE__}:#{self.to_s}: search-action for '#{self.class.name}' can not be created, it already exists!")
  end
end

Допустим, у меня есть пользовательский контроллер. В пользовательской форме мне нужно искать несколько объектов. Давайте предположим, что я хочу иметь возможность поиска пользователей, отделов и клиентов... с моим миксином, мне просто нужно инициализировать поисковые операции следующим образом:

init_searchaction :user
init_searchaction :department
init_searchaction :client, :find_clients

это создаст действия внутри включающего контроллера, которые называются

search_user
search_department
find_clients

Единственное, чего не хватает, - это способ найти для них маршрут. Я не хочу определять маршрут заранее. Я просто хочу, чтобы init_searchaction и mixin создали необходимый маршрут.

Итак... возможно ли добавить маршрут к соответствующему поисковому действию, если не использовать метод mixins init_searchaction динамически? Я думаю, что необходимый код будет размещен на отметке #TODO в приведенном выше примере кода. Но я до сих пор не выяснил, как это сделать... Я имею в виду, на самом деле, я бы удивился, если бы это было невозможно.

Будет ли у кого-нибудь идея, как это сделать? Заранее спасибо за любую идею, которая приводит к решению!

1 ответ

Вы можете добавить работу вокруг стандартного динамического маршрута

match ':controller(/:action(/:id(.:format)))'

измените это на ваши цели и наслаждайтесь:)

Другие вопросы по тегам