Rails - параметры с "точкой" (например, /google.com) - PullRequest
17 голосов
/ 01 июня 2010

Как заставить Rails рассматривать параметр с точкой в ​​значении, например google.com (например, /some_action/google.com), отдельный параметр, а не "id" => "google", "format"=> "com"?

Значение параметра должно быть "id" => "google.com"

Ответы [ 4 ]

29 голосов
/ 01 июня 2010

По умолчанию динамические сегменты не принимают точки - это потому, что точка используется в качестве разделителя для форматированных маршрутов. Однако вы можете добавить некоторые требования регулярных выражений к параметрам маршрута. Здесь вы хотите разрешить точки в параметрах.

match 'some_action/:id' => 'controller#action', :constraints  => { :id => /[0-z\.]+/ }

А в рельсах 2.3:

map.connect 'some_action/:id', :controller => 'controller', :action => 'action',  :requirements => { :id => /[0-z\.]+/ } 

Разделитель направляющих рельсов

4 голосов
/ 04 сентября 2014

В Rails 4 я использовал:

get 'operation/:p1/:p2', to: 'operation#get', constraints: { p1: /[^\/]+/, p2: /[^\/]+/ }

разрешает любой символ в обоих параметрах (кроме '/')

1 голос
/ 05 октября 2015

И при использовании с ресурсов , это можно сделать так:

resources :post, 
               only: [ :create, :index, :destroy ], 
               constraints: { id: /[0-z\.]+/ }

Протестировано в Rails 4.1

0 голосов
/ 08 февраля 2017

У нас был похожий случай, когда мы удалили некоторую часть пути API. В основном мы перешли от /api/app/v1/* до /api/v1/*

Мы помещаем это в наши маршруты

match '/api/app/v1/*path', to: redirect(path: '/api/v1/%{path}'), via: :all

Это было нормально, за исключением некоторых маршрутов, которые заканчивались параметрами пути, включая точки. Например. /api/v1/foo/00.00.100, где .100 был разобран в format, а оставшийся параметр имел значение 00.00

Мы охраняли это с некоторым ограничением на параметры.

put '/api/app/v1/foo/:version', 
    constraints: { version: /([0-9]+)\.([0-9]+)\.([0-9]+)/ },
    to: redirect('/api/v1/foo/%{version}')

Редактировать: мы используем рельсы 5

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...