Возможно ли ограничение на необязательный параметр маршрута, который равен 'в середине' маршрута?Необязательный параметр с ограничением в середине маршрута Rails
Я хотел бы иметь следующий маршрут:
get ':city(/:suburb)/:venue_type', venue_type: /bar|restaurant|cafe/
Что бы показать список мест определенного типа, расположенный в городе, или необязательно иметь его сузили до пригорода. Единственный :venue_types
, который я поддерживаю, это bar, restaurant
и cafe
.
Теперь я хотел бы достичь следующих отображений:
/nyc/manhattan/bar -> :city = nyc, :suburb = manhattan, :venue_type = bar
/nyc/bar -> :city = nyc, :suburb = (nil), :venue_type = bar
/nyc/whatever/cafe -> :city = nyc, :suburb = whatever, :venue_type = cafe
/nyc/whatever -> :city = nyc, :suburb = whatever, :venue_type = (nil) - routing error
До сих пор я пытался с нижеследующим не делает работу:
class ValidSuburb
INVALID = %w[bar restaurant cafe]
def self.matches?(request)
request.params.has_key?(:suburb) && !INVALID.include?(request.params[:suburb])
end
end
get ':city(/:suburb)/:venue_type', venue_type: /bar|restaurant|cafe/, suburb: ValidSuburb.new
Возможно ли это быть достигнут на всех ограничениях или мне приходится прибегать к нескольким маршрутам?
Да, это то, к чему мне прибегать. Однако я бы приветствовал ограниченное решение, поскольку мой «настоящий» маршрут пересекает несколько строк с несколькими параметрами, и было бы удобно не дублировать его. – mrt
Вот почему это может быть лучше ** не **, чтобы опустить вашу проблему в определенных обстоятельствах. – deefour