如何在Rails3中动态添加路由到作用域资源?

时间:2011-03-21 08:35:59

标签: ruby-on-rails ruby ruby-on-rails-3 mixins rails-routing

现在我正试图概括我的一些代码。到目前为止它进展顺利,我写了一些mixins,我可以动态地添加到控制器或模型中,以便在遵守DRY的同时完成任务。

但是在我的“搜索表助手”中,我遇到了一个角落,现在,我有点无能为力。

我有一个mixin'SearchIndexController',它添加了在searchindex-table中搜索数据所需的方法。

在包含mixin之后,我可以在相应的控制器中初始化搜索操作,调用此方法:

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

所以我想说我有一个用户控制器。在Userform中,我需要搜索多个对象。让我们假设我希望能够搜索用户,部门和客户......使用我的mixin我只需要初始化这样的搜索:

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

这些将在包含控制器中创建名为

的动作
search_user
search_department
find_clients

唯一缺少的是为他们获取路线的方法。我不想要预先定义路线。我只想'init_searchaction'并让mixin创建必要的路线。

那么......是否可以动态地使用mixins init_searchaction方法将路由添加到accoring search-action中?我认为必要的代码将放在上面代码示例中的#TODO标记处。但我还是没有发现怎么做......我的意思是,如果不可能,我会感到惊讶。

有人会知道如何做到这一点吗?提前感谢任何导致解决方案的想法!

1 个答案:

答案 0 :(得分:1)

您可以围绕标准动态路线添加工作

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

将其改为您的目标并享受:)