Typus路线订单

时间:2011-02-15 00:33:35

标签: ruby-on-rails rubygems typus

过去,您可以通过放置

将Typus路线准确地加载到您需要的位置
  Typus::Routes.draw(map)

在routes.rb文件中的适当位置。似乎不再支持它,并且它们总是在所有应用程序路径之后加载。这会导致必须在最后定义的捕获路线出现问题。有谁知道现在如何控制典型的加载顺序?有没有办法在任何应用程序路由之前而不是之后定义它们?谢谢!

2 个答案:

答案 0 :(得分:3)

我通过在我的应用程序routes.rb的末尾留下我的catch-all路线来绕过它。但是将它排除在匹配的Typus网址之外:

# A catch all route
match '*path' => 'content#show', :constraints => lambda{|request|
  !request.path.starts_with?("/admin") # excluded if typus will be taking it...
}

这可能或现在可能对你有用......

答案 1 :(得分:0)

我正在寻找相同的答案。

目前我已经使用了从typus的config / routes.rb中复制内容并将其放入我的routes.rb文件中,然后再进入捕获路径。

这是一个可怕的,黑客的解决方案,但它正在解决我的直接问题。

示例:

  # TODO: KLUDGE: MANUALLY BRING THE TYPUS ROUTES IN
  #       Typus used to provide :
  #           Typus::Routes.draw(map)
  #       But that is no longer the case.
  scope "admin", :module => :admin, :as => "admin" do

    match "/" => "dashboard#show", :as => "dashboard"
    match "user_guide" => "base#user_guide"

    if Typus.authentication == :session
      resource :session, :only => [:new, :create, :destroy], :controller => :session
      resources :account, :only => [:new, :create, :show, :forgot_password] do
        collection do
          get :forgot_password
          post :send_password
        end
      end
    end

    Typus.models.map { |i| i.to_resource }.each do |resource|
      match "#{resource}(/:action(/:id(.:format)))", :controller => resource
    end

    Typus.resources.map { |i| i.underscore }.each do |resource|
      match "#{resource}(/:action(/:id(.:format)))", :controller => resource
    end
  end
  # END KLUDGE

  # Catch all to the state page handler
  match '/:page' => 'pages#show', :as => 'page'