【问题标题】:Catch urls containing certain character in routes.rb在 routes.rb 中捕获包含特定字符的 url
【发布时间】:2013-11-25 10:24:14
【问题描述】:

我在routes.rb中有三个规则:

match ":topic", to: 'topics#show', via: :get, as: :topic    

match ":topic/:multi_city(/:year(/:month))", to: "multi_cities#show", via: :get, as: :multi, constraints: {multi_city: /.*\+.*/}

scope ":topic" do
  scope ":city" do
    match "organizers", to: 'organizers#index', via: :get, as: :topic_organizers
    match "(:year(/:month))", to: "communities#show",   via: :get, as: :community
  end
end

本意是按顺序涵盖以下三种情况:

/football/  # only the topic  
/football/chicago+seattle+portland/  # a topic and a combination of cities  
/football/chicago # a topic and a single city

规则自己起作用,但问题是它们相互干扰。

目前第一条规则没有得到应用,因​​为第二条规则正在捕获这些请求,尽管我试图限制第二条规则只捕获带有包含+ 符号的次要部分的网址。

如何构造第二条规则,使其仅捕获包含具有两个段的 URL 的请求(并且第二段必须包含加号)?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3.2 routes url-routing


    【解决方案1】:

    另一种选择是确保您拥有一个城市,然后是更多:

    get ":topic/:city+:multi_cities" => "controller#action", :multi_cities => /\w[\+]?[\w]?/
    

    然后,您可以在控制器中解析 params[:multi_cities] 以进一步分解城市。

    【讨论】:

    • 第一个选项,我不是已经有了吗? constraints: {multi_city: /.*\+.*/}
    • 啊,是的,我错过了——我的错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 2012-10-19
    • 2017-08-02
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多