我的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
我做错了什么?
谢谢!
答案 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
。