2011-03-21 52 views
3

現在我試圖推廣我的一些代碼。到目前爲止,它進展順利,我寫了一些mixin,我可以動態地添加到控制器或模型中,以便在遵守DRY的同時完成任務。如何在Rails3中動態地添加一個路徑到作用域資源?

但隨着我的「Searchform-幫手」我打了一個角落中,現在,我是一個有點無能。

我有一個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 

所以可以說我有一個用戶控制器。在用戶窗體中,我需要搜索多個對象。讓我們假設我希望能夠給搜索用戶,部門和客戶...我的mixin我只是必須初始化這樣的searchactions:在包括控制器,不到

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

這將創建行動所謂

search_user 
search_department 
find_clients 

唯一缺少的是一種方式來獲得的路由他們。我不想先定義路線。我只想'init_searchaction'並讓mixin創建必要的路線。

所以......將有可能從withing init_searchaction動態方法混入添加到accoring搜索行動的路線?我認爲必要的代碼將放在上面代碼示例中的#TODO標記處。但我仍然沒有發現如何去做......我的意思是,如果不可能,我會感到驚訝。

有沒有人有一個想法,如何做到這一點?預先感謝任何想法,導致解決方案!

回答

1

可以

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

改變其添加變通非標準動態路由到您的目標和享受:)

+0

吧...沒想到這一點,就會給它一個嘗試 – Ingo 2011-03-28 12:08:19

+0

哼。對於簡單的情況下,會做的伎倆...但也讓我編輯我的問題,使我的問題更加透明... – Ingo 2011-03-28 18:52:38

+0

最好的解決方案是讓simplier。我相信你能簡化70%,你的邏輯在這裏:) – fl00r 2011-03-28 19:25:05

相關問題