Вопрос функционального тестирования рельсов
Когда я делаю
get :inside, :format => :xml, :lat2 => "41", :lng2 => "-73.9", :lat1 => "40", :lng1 => "-74", :category => "girl", :order => "date"
с моими маршрутами.rb включает в себя:
get 'images/inside/:lat1/:lng1/:lat2/:lng2/:order/:category', :to => "images#inside"
я получил
ActionController::RoutingError: No route matches {:lng1=>"-74", :category=>"girl", :lat2=>"41", :format=>:xml, :lng2=>"-73.9", :order=>"date", :lat1=>"40", :action=>"inside", :controller=>"images"}
Но, когда я делаю
get :inside, :format => :xml, :lat2 => "41", :lng2 => "-73", :lat1 => "40", :lng1 => "-74", :category => "girl", :order => "date"
оно работает!
Разница лишь в десятичном значении lng2.
Обратите внимание, что если в файле rout.rb нет параметров, он работает, но мне нужны
2 ответа
Насколько я могу судить, это потому, что у вашей ценности есть точка. По умолчанию маршруты Rails (по крайней мере, Rails3) не могут содержать точки. Чтобы обойти это, см. http://avdi.org/devblog/2010/06/18/rails-3-resource-routes-with-dots-or-how-to-make-a-ruby-developer-go-a-little-bit-insane/ с ума /
Могу поспорить, что десятичная точка заставляет Rails думать, что задан формат (например,.xml или.js).
Вы можете обойти это с помощью регулярных выражений, что-то вроде того, что описано здесь: http://zargony.com/2009/05/05/routing-parameters-with-a-dot