Ruby 路由,动态数据与常量路由提示混合在一起



我是 ruby 的新手,我想构建一条半复杂的路线,用于创建在我们的网站上列出工作的动态站点地图

我的控制器称为站点地图我的站点地图路线位置是"q"进行查询

我们有工作机会

  1. 行业,例如酒店、零售
  2. 地点,例如悉尼、墨尔本
  3. 按地点细分的行业,例如悉尼的酒店业

URL 签名的一部分由常量值组成,d 有助于确定使用三种路由类型中的哪一种。

  1. 按行业
    • www.somedomain.com/j/hosptality-jobs
    • 提示:-jobs后缀将设置 :行业参数
    • :industry => hospitality
  2. 按位置
    • www.somedomain.com/j/jobs-in-sydney
    • 提示:jobs-in-前缀将设置 :location 参数
    • :location => sydney
  3. 按行业和地点
    • www.somedomain.com/j/hospitality-jobs/in-sydney
    • 如上所述,但分布在 2 个 URL 段上
    • :industry => hospitality
    • :location => sydney

我要么想根据路线执行 3 个不同的操作,要么只要有表示动态数据和类型的丰富变量(即类型 = 行业 |城市)

我认为您做到这一点的唯一方法是使用包罗万象的路线:

get '/j/*path', to: 'jobs#route'

(控制器操作需要更好的名称。

该操作使用逻辑读取路径,并使用 redirect_to 路由到具有正确参数的正确路径。

我让所有 3 条路由都正常工作,加上第 4 条捕获所有错误 URL 的路由

get '/q/(:industry)-jobs' => 'sitemap#industry', :as => :sitemap_by_industry
get '/q/jobs-in-(:location)' => 'sitemap#location', :as => :sitemap_by_location
get '/q/(:industry)-jobs/in-(:location)' => 'sitemap#industry_location', :as => :sitemap_by_industry_location
# This catch is used if someone starts playing around with the URL's and we can't map to the three listed routes
get '/q(/:bad1(/:bad2))' => 'sitemap#sitemap', :as => :sitemap
  1. www.somedomain.com/q/hosptality-jobs
    • 正在行驶 1 号路线并设置:
    • :industry => hospitality
  2. www.somedomain.com/q/jobs-in-sydney
    • 正在行驶 2 号公路并设置:
    • :location => sydney
  3. www.somedomain.com/q/hospitality-jobs/in-sydney
    • 正在行驶 3 号公路并设置:
    • :industry => hospitality
    • :location => sydney
  4. 以下无效 URL 将全部命中第 4 个捕获所有路由
    • www.somedomain.com/q
    • www.somedomain.com/q/
    • www.somedomain.com/q/hosptality-joXXbs
    • www.somedomain.com/q/jobXXs-in-sydney
    • www.somedomain.com/q/hospitality-jobXXs/in-sydney

最新更新