Rails使用嵌套路由路由约束

时间:2015-07-31 14:28:16

标签: ruby-on-rails ruby regex

让我简单解释一下我如何使用这些路线,然后向您展示我正在使用的代码。我希望以下情况发生:

hearing-providers/any-text-but-a-state-abbreviation -> dispensers controller

hearing-providers/TX -> regions#show

hearing-providers/TX/dallas -> cities#show

这是我尝试的代码:

  resources "hearing-providers", controller: 'dispensers', as: 'dispensers'  do 
    constraints( region_id: /A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY]/ ) do
      collection do
        get ':state_abbreviation' => 'regions#show', :as => :region
        get ':state_abbreviation/:city_name' => 'cities#show', :as => :city
      end
    end
  end

问题在于:

路径是什么并不重要,我总是被路由到区域控制器。约束设置似乎无法正常工作。

1 个答案:

答案 0 :(得分:2)

您已为region_id定义了约束,但您未在路线中使用它。将约束更改为:

constraints( state_abbreviation: /A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY]/ ) do

一切都应该有效。