Rails中的路由问题

时间:2011-08-04 10:42:10

标签: ruby-on-rails routing

我的routes.rb文件有这样的样式:


    match 'tickets/:conditions'           => 'tickets#index', :as => :list_tickets, :constraints => {:conditions => /(\w+):(\w+)\/?/}
    match 'tickets/sort::sort'            => 'tickets#index', :as => :root_sort
    match 'tickets/mailbox::mailbox'      => 'tickets#index', :as => :view_mailbox
    match 'tickets/status::status'        => 'tickets#index', :as => :view_status  
    match 'tickets/tag::tag'              => 'tickets#index', :via => :get, :as => :show_tag

我想让它使用以下地址: http://localhost:3000/tickets/mailbox:1/sort:date 并倒置了: http://localhost:3000/tickets/sort:date/mailbox:1

我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

对不起,我不能给你一个详细且经过测试的答案(目前缺乏时间),但我想你可能会发现Rails Routing from the Outside In指南有用,尤其是Route globbing部分。< / p>

如果你写(要小心!我还没有测试过这段代码):

match 'tickets/*conditions' => 'tickets#index'

然后在您的操作中,您可以解析params[:conditions]并应用必要的过滤器。 类似的东西:

params[:conditions].split('/').map {|c| c.split(':',2) }
# => [ ['sort','date'], ['mailbox','1'] ]

我担心你不会有所有可能条件的命名路线,但我希望它不是很重要。我相信你会解决如何在给定条件下创建路径的问题 - 只需记住在必要部分调用CGI::escape