Ich habe eine eingeschränkte Route, die Benutzernamen wie folgt abgleicht:
controller :users, :path => '/:username', :as => :user, :constrain => { :username => /^_?[a-z]_?(?:[a-z0-9]_?)*$/i } do
# viele geschachtelte Routen hier
end
Wenn ich RSpec-Tests dafür schreiben will (anstatt user_id
wie üblich zu verwenden), schlagen alle Tests fehl, weil es die Route "nicht finden kann", obwohl sie auf dem Server einwandfrei funktioniert.
Beschreibung für eine ungültige Anfrage" do
it "sollte eine 404 rendern, wenn ein zugehöriges Foto nicht gefunden wurde" do
# gib ihm eine ungültige Foto-ID
xhr :post, :destroy, :id => "999999", :photo_id => "999999", :username => @photo_owner.username
# nicht gefunden
response.status.should == not_found
end
end
Dieser Test hat einwandfrei funktioniert, als ich die user_id
in meinen Routen benutzt habe, bevor ich zu Benutzernamen gewechselt bin:
resources :users do
# geschachtelte Routen
end
und
xhr :post, :destroy, :id => "999999", :photo_id => "999999", :user_id => @photo_owner.id
Also was mache ich falsch und was hat sich geändert?
Meine Serverkonsole zeigt Folgendes an, was bedeutet, dass alle Parameter ordnungsgemäß übergeben wurden:
Verarbeitung durch TagsController#destroy als JS
Parameter: {"constrain"=>{"username"=>/^_?[a-z]_?(?:[a-z0-9]_?)*$/i}, "username"=>"rubynewb", "photo_id"=>"2004-the-title-of-the-photo-here", "id"=>"1797"}