Как динамически добавить маршрут к ресурсу с определенными областями в 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)))'
измените это на ваши цели и наслаждайтесь:)