2011-03-06 72 views
0

我有一個模型「工作」,我添加了一個新的動作「預覽」。爲了支持這一新的行動,我已經體改的routes.rb如下:Rails路由問題 - 「沒有路由匹配...」

resources :jobs do 
    member do 
     get 'preview' 
    end 
end 

然後在我的工作創建行動我有以下幾點:

if @job.save 
    redirect_to preview_job_url 

然而,當我保存的形式,而不是重定向到預覽網址,我得到以下路由錯誤:

Routing Error 
No route matches {:action=>"preview", :controller=>"jobs"} 

想不通爲什麼發生這種情況,因爲URL工作正常(HTTP://本地主機:3000 /職位/ ID /預覽),如果我運行耙路線正確的路線似乎在那裏:

preview_jobs GET /jobs/preview(.:format)   {:action=>"preview", :controller=>"jobs"} 

任何想法可能會發生什麼?好像所有的東西都已經到位,但我是Rails的新手,所以我確信我錯過了一些明顯的東西。非常感謝。

+0

您是否已驗證實際上得到一個GET請求?如果您在瀏覽器中訪問/ jobs/preview/1會發生什麼情況? – 2011-03-07 00:00:02

回答

3

您將'預覽'定義爲成員操作。成員動作是指模型的一個實例。當您調用preview_job_url時,您需要傳遞特定的Job對象或作業的ID,以便可以創建該URL。這應該是有道理的......如果你不告訴框架你想爲哪個Job創建一個URL,Rails如何爲你建立一個引用特定模型的URL?

在你的控制器試試這個:

if @job.save 
    redirect_to preview_job_url(@job) 
+0

當然,非常有意義 - 謝謝! – cman77 2011-03-07 00:15:23

+0

在您原來的問題中,您從rake路線中的代碼段不會與您的來自routes.rb的代碼段排隊。 'preview_jobs =>/jobs/preview(。:format)'是對作業集合的操作,而'preview_job =>/jobs /:id/preview(。:format)'是對作業集合成員的操作。換句話說,假設兩個都是在routes.rb中定義的(這很奇怪),'preview_job_url(@job)=>「/ jobs/1234/preview」'和'preview_jobs_url =>「/ jobs」'。合理?使用起來有點棘手。我們都去過那裏。我懷疑你有一個額外的「s」在某個地方。 – MDaubs 2011-03-07 00:15:36

相關問題