2012-06-13 123 views
0

試圖鏈接到「user_annversary_path」和不正確的路徑紀念日在被傳遞。user_id是正確的(2),但標識(紀念日)應爲1錯誤的參數傳遞到URL

ActiveRecord::RecordNotFound in AnniversaryController#show 

Couldn't find Anniversary with id=2 
Rails.root: /Users/nelsonkeating/Desktop/ReminDeal 

Application Trace | Framework Trace | Full Trace 
app/controllers/anniversary_controller.rb:10:in `show' 
Request 

Parameters: 

{"user_id"=>"2", 
"id"=>"2"} 

anniversary_controller

def show 
     @user = current_user 
     @anniversary = Anniversary.find(params[:id]) 
    end 

查看代碼觸發

傳遞不正確的paramater
<%= link_to "Anniversary", user_anniversary_path(@user) %> 

路線

resources :users do 
     resources :anniversary 
    end 

回答

0

週年紀念嵌套在您的routes.rb用戶內嗎?如果是這樣,請嘗試與用戶傳遞週年紀念。

<%= link_to "Anniversary", user_anniversary_path(@user, @anniversary) %> 

此外,爲什麼不從視圖傳遞current_user?它不可訪問嗎?

<%= link_to "Anniversary", user_anniversary_path(current_user, @anniversary) %> 

有關更多詳細信息,請參見http://guides.rubyonrails.org/routing.html#nested-resources

+0

是的,@trent它是嵌套的(我添加上面的路由)。你的錯誤都會觸發路由錯誤..請參閱要點https://gist.github.com/2922180 – js111

+0

查看Ryan的答案。我錯誤地認爲你在一個擁有@anniversary實例變量的視圖中工作。 – Trent

+0

我剛剛閱讀你對Ryan的帖子的評論。它看起來像你需要user_anniversaries_path(User.first)。或者current_user,如果在視圖中可訪問的話。 – Trent

2

對於user_anniversary_path,你需要傳遞參數:一個User對象(或代表User對象的ID)和Anniversary對象(或代表Anniversary對象的ID)。例如,你可以這樣做:

user_anniversary_path(User.first, Anniversary.first) 

或者這樣:

user_anniversary_path(1, 2) 

哪裏1User對象的id,並2Anniversary對象的id。我真的會推薦堅持將整個對象傳遞給這個方法。

當你嘗試Trent的例子時,它失敗的原因是因爲@anniversary在你調用路由幫助器的行爲中是零。請注意這一點。

+0

@ ryan-brigg謝謝你的答案,但仍然有點困惑,我應該如何改變我的link_to路徑...我基本上需要根據user_id搜索我週年紀念表..(has_many:anniversaries,belongs_to:user association )。 – js111