是否可以对位于路线“中间”的可选路线参数进行约束?
我想有以下路线:
get ':city(/:suburb)/:venue_type', venue_type: /bar|restaurant|cafe/
这将显示位于城市中的特定类型的场所列表,或者可以选择将其缩小到郊区。我唯一:venue_types
支持的是bar, restaurant
and 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
这是否可以通过限制来实现,还是我必须求助于多条路线?