2013-04-29 207 views
11

我是一个完全新手在Rails中。如何使用Link_to与嵌套资源

我已经创建了一个Web应用程序,我可以通过/posts/123/comments//posts/123/comments/new访问,但我不知道如何使用的link_to在索引视图来显示具体的评论,当我尝试连接它,会出现“无路由“或”未定义符号“。

我在模型中定义的帖子和评论之间有嵌套的have_many关系,并且在我执行rake路由时出现routes.rbpost_comments GET /posts/:post_id/sensors(.:format)comments#index

我该怎么做?

回答

7

尝试所有它没有完全工作的答案后,我找到了一种方法来解决它。 在第一关键时刻,我用

post_comments_url(@帖子,评论)

,其中注释是@ post.each内的项目。

它生成一个“奇怪的”路线,使用。而不是/像 “后/ 34/comments.2”,我固定它用单数形式:

post_comment_url(@帖子,评论)

感谢您的帮助!

+0

你试过'link_to'show',[@post,comment]'? – toch 2013-05-02 07:54:04

12

如果您已经定义嵌套资源(当然,你的模型CommentPost关联)

resources :posts do 
resources :comments 
end 

您可以链接评论如下

<!-- /posts/:post_id/comments/:id --> 
<%= link_to 'Show', [@comment.post, @comment] %> 

我写了一个full example of nested resources in a past blog post

+0

我已将我的密码更改为 <%@ posts.each do | item | %> ​​<%= item。农布雷%> ​​<%= item.info%> ​​<%=的link_to '显示',[@ comment.post,@comment]%> <% end %> 和它并不运行...出现未定义的方法帖子。 我该怎么做? 谢谢! – fuco 2013-04-29 11:59:19

+0

这可能是因为你的'Comment'模型没有与'Post'关联。你应该在'Comment'模型中有'belongs_to:post'。如果没有,这是正常的,它是未定义的。你也可以用包含注释的Post对象代替'@ comment.post'(可能是你的案例中的'item')。 – toch 2013-04-29 12:04:49

+0

这对我不起作用:它抱怨'post_comment_path'是未定义的(在'rake routes'中显示的路由是'post_comments',复数) – digitig 2014-07-14 16:14:06

0

除了toch的答案,你可以在Rails控制台的帮助下调试你的link_to调用。

对于这一点,你需要加载视图助手在控制台:

irb(main):001:0> include ActionView::Helpers::UrlHelper 
=> Object 
irb(main):002:0> helper.link_to "posts", app.posts_path 
=> "<a href=\"/posts\">foo</a>" 

另一个工具,类似于耙路线路线调试:https://github.com/schneems/sextant

1

Get方法名从第一列

rake routes 

并相应地传递ID。当然后缀与_path IR _url 方法名要知道更多,请访问Rails guide