I\'m looking to match the pattern state/city
in the path, unless the state variable equals \"auth\"
match \'/:state/:city\' => \'cities#index
You should be able to define your /auth
route before your state/city routes:
Route priority
Not all routes are created equally. Routes have priority defined by the order of appearance of the routes in the config/routes.rb file. The priority goes from top to bottom.
So this order should do the right thing:
match '/auth/twitter' => ...
match '/:state/:city' => ...
You might want to avoid the problem altogether by putting your state/city routes into their own namespace:
match '/place/:state/:city' => ...
That leaves the top level clear for other future uses.
Based on mu is too short's comments, here is the answer I've come up with:
match '/:state/:city' => 'cities#index', :as => :state_cities, :constraints => OmniauthPassThru.new
lib/omniauth_pass_thru.rb
class OmniauthPassThru
def initialize
@passthru = ["/auth/facebook", "/auth/twitter"]
end
def matches?(request)
return false if @passthru.include?(request.fullpath)
true
end
end