2012-06-09 182 views
0

我努力成功地將ID傳遞到我設置的稱爲作業的嵌套資源的URL中。嵌套的資源問題

當我嘗試了@job對象傳遞到我的鏈接,我得到的錯誤如下:

No route matches {:action=>"edit", :controller=>"jobs", :user_id=>1, :id=>nil} 

這清楚地表明它不能正確等找到ID被找到nil

目前,我有我的路線設置爲這樣:

resources :users do 
    resources :jobs 
end 

和我有聯繫是<%= link_to "Edit", edit_user_job_path(@user.id,@job) %>

有趣的是,如果我通過對象@jobs結束'它'將正確加載頁面,但是當我點擊鏈接將嘗試並添加所有用戶作業ID的。

在我的控制器進行編輯,我有:

def edit 
@user = current_user 
@job = @user.jobs.find(params[:id]) 
end 

任何幫助真的將不勝感激:)

UPDATE

好吧,我定義的錯誤頁面上的對象我的控制器(在編輯下而不是索引)。我現在遇到的問題是Couldn't find Job without an ID

我我的控制器索引定義更新爲:

def index 
    @user = current_user 
    @jobs = @user.jobs.all 
    @job = @user.jobs.find(params[:id]) 
end 

而且在我看來(工種#指數)

<% @jobs.each do |f| %> 
... 
<%= link_to "Edit", edit_user_job_path(@user.id,job) %> 
... 
<% end %> 

任何建議,將不勝感激如果你知道我出錯的地方:)

+0

你可以發佈專門用於edit_user_job路徑的rake路由輸出嗎?你也說@ user.id但不是@ job.id? – John

+0

我已經得到了這個。 @job必須是零。 – cdesrosiers

回答

2

那個錯誤意味着@job是零。

鏈接是編輯路徑,並且您提供的控制器代碼來自控制器中的編輯操作。編輯頁面似乎不太可能鏈接到它自己。

看看實際呈現該頁面的代碼(它會出現在你的堆棧跟蹤中),你會發現@job沒有設置。我懷疑你的索引頁上有這樣的事:

<% @jobs.each do |job| %> 
    ... 
    <%= link_to "Edit", edit_user_job_path(@user.id,@job) %> 
    ... 
<% end %> 

如果是這樣的話,那麼該鏈接應該是job,不@job,即

<%= link_to "Edit", edit_user_job_path(@user.id,job) %> 
+0

感謝iHiD,你是正確的我在我的控制器中定義錯誤頁面上的對象。然而,現在我已經定義了一些東西(上面已經更新了答案),我總是得到'沒有ID就找不到工作' - 你知道我在哪裏出錯嗎?謝謝 –

+0

根本不需要'@job = @ user.jobs.find(params [:id])'這一行。你列出了所有的工作。你不需要找到一個人。 – iHiD

1

(上iHiD的擴大用他自己的帖子發表評論)

使用restful資源意味着您要使用rails默認值,這意味着索引頁會給出所有作業的列表,並且默認情況下不會有任何特殊作業。如果從命令行運行rake routes,則會獲取所有路由,並使用從URI設置的參數。它應該給你這樣的東西:

user_jobs GET /users/:user_id/jobs(.:format)   jobs#index 

正如你所看到的,沒有:id(params [:id])爲索引操作。