2012-06-13 99 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