Blog jak widać już nie jest aktualizowany. I raczej nie będzie. Wisi sobie ot tak, ze względów historycznych :)

Routingi Rails - dziwny konflikt argumentów :as i :collection

Krzysztof Rygielski | 2010-03-23 13:36 | Kategorie: Rails

Przy pracy nad jednym projektem RoR natknałem się na dziwne zachowanie. Wygląda to na jakiś konflikt między opcjami dodawania routingu. Może to bug a może nie, nie wiem.

Miałem zdefiniowany następujący routing:

map.namespace :admin do |admin|
  ...
  admin.resources :directories, :as=>"directory", :member=>{:delete=>:put}, :collection=>{:search=>:get}
  ...
end

Użyłem tutal parametru :as aby zmienić łańcuch znaków w wyświetlanym urlu w przeglądarce z directories na directory. Poza tym używam sphinxa jaki silnika wyszukiwania i dodałem metodę search do routingu przy użyciu :collection aby móc używać wygodnego helpera search_admin_directories_path. Po wpisaniu frazy wyszukiwania i wysłaniu jej pod adres metody search otrzymałem taki oto komunikat o błędzie:

Only get, put, and delete requests are allowed.

Wydało mi się to dziwne, gdyż w innej części aplikacji miałem zastosowany prawie identyczny kod i działało wszystko prawidłowo. Jedyną różnicą było użycie w tym routingu parametru :as. Spróbowałem usunąć ten parametr i problem znikł... Trochę googlałem na ten temat ale nic konkretnego nie znalazłem. Pozostaje mi zrezygnować z parametru :as, gdyż jego użycie nie jest niezbędne tak jak wyszukiwarka.

Jeszcze kiedyś poszukam rozwiązania tego problemu, gdyż sprawa mnie nieco zaintrygowała :-)