如何在嵌套资源中使用Link_to

11

我是Rails的完全新手。

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

在模型和routes.rb中定义了帖子和评论之间的嵌套 have_many 关系,在执行 rake routes 时,post_comments GET /posts/:post_id/sensors(.:format) comments#index 显示。

我该怎么做?

4个回答

12
如果你定义了嵌套资源(当然,你的模型 CommentPost 已经关联),则:
resources :posts do
 resources :comments
end
您可以按照以下方式链接评论:

您可以链接一个评论如下

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

我曾在过去的博客文章中写过关于嵌套资源的完整示例。点击此处查看


我已经修改了我的代码为<% @posts.each do |item| %> <tr> <td><%= item.nombre %></td> <td><%= item.info %></td> <td><%= link_to 'Show', [@comment.post, @comment] %></td> </tr> <% end %> 但它无法运行...出现了一个未定义的方法post。我该怎么办?谢谢! - fuco
这可能是因为您的“Comment”模型未与“Post”相关联。您应该在“Comment”模型中使用“belongs_to:post”。如果没有,那么它是未定义的很正常。您还可以将“@comment.post”替换为包含评论的“Post”对象(在您的情况下可能是“item”)。 - toch
对我来说这不起作用:它抱怨post_comment_path未定义(在rake routes中显示的路由是post_comments,复数形式)。 - digitig

8
尝试了所有答案后,仍未完全解决问题,但我找到了一种解决方法。 首先,我使用了

post_comments_url(@post,comment)

其中评论是@post.each中的项目。
它会生成一个“奇怪”的路由,使用.而不是/,比如“post/34/comments.2”,我使用单数形式进行了修复:

post_comment_url(@post,comment)

谢谢您的帮助!

1
从第一列中获取方法名。
   rake routes

相应地传递id。当然,要将方法名后缀命名为_path_url。 欲了解更多,请访问 Rails指南


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>"

另一个类似于Rake路由用于路由调试的工具是:https://github.com/schneems/sextant


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接