2011-01-30 57 views
1

讀到這裏匹配: "No route matches" error?沒有途徑與有效的對象

我試圖找出是否有寶石或方式猴補丁ActionPack的來解決這個約束。我寫了specs(他們運行得很快),我不明白爲什麼actionpack在應用到一個沒有「保存」的對象時拋出這個錯誤。

有兩個原因:

  1. 爲什麼它拋出一個「無路由匹配」,當它真的應該扔東西更有意義(如對象必須保存可以構造一個路線之前,或對象ID零)。這個例外似乎有些模糊。
  2. 我不應該保存對象,如果我所要做的只是爲該對象生成一個URL,因爲ID是使用工廠或類似的東西填充的。

這種約束使得它的痛苦寫快速測試,除非我失去了一些東西......

+0

向我們展示您的抽屜...我的意思是代碼 – 2011-01-30 21:30:45

+0

我解決了這個問題。我正在使用摩卡,但發現除非你特意嘲笑路由框架需要什麼,否則它不會產生路徑。 – BlueFish 2011-02-15 02:41:25

回答

1

真,該錯誤信息是有點模糊。關於你的第二點,你不需要保存一個對象來生成一個URL,那麼這個幫助器就會和一個字面值一樣工作。

building_path(1) # GET /buildings/1 => BuildingsController#show, params={:id=>"1"} 

所以本例中的對象都可以用任何值代替:

get :show, :id => "1" 

例如,如果你使用rails generate scaffold Article,RSpec的將建立這樣一個規範:

def mock_article(stubs={}) 
    (@mock_article ||= mock_model(Article).as_null_object).tap do |article| 
     article.stub(stubs) unless stubs.empty? 
    end 
    end 

    describe "GET show" do 
    it "assigns the requested article as @article" do 
     Article.stub(:find).with("37") { mock_article } 
     get :show, :id => "37" 
     assigns(:article).should be(mock_article) 
    end 
    end 

這不會影響數據庫。