2011-03-21 37 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

相关问题