轨道3中嵌套模型的CRUD操作

时间:2012-08-30 07:47:25

标签: ruby-on-rails

我是rails 3的新手,按照ruby网站的指南,我构建了第一个博客应用程序。

但是在应用程序中,模型“Comment”没有编辑/更新/删除操作。

然后我尝试添加它,但我失败了。

我不是仅为模型“Comment”生成模型,而是使用以下方法为模型“Comment”创建脚手架:

rails generate scaffold Comment commenter:string body:text post:references

在post.show页面中,我将其修改为:

<% @post.comments.each do |comment| %>
  <tr>
    <td><%= comment.commenter %></td>
    <td><%= comment.body %></td>
    <td><%= link_to 'Edit', edit_comment_path(comment) %></td>
    <td><%= link_to 'Destroy', comment, confirm: 'Are you sure?', method: :delete %></td>
  </tr>
<% end %>

列出了它们,但是当我点击“修改”或“删除”链接时,它会尝试跳转到:

http://localhost:3000/comments/1

然后我会得到错误:

No route matches [GET] "/comments/3/edit" or

No route matches [DELETE] "/comments/3"

我现在不知道。

我可以学习任何开箱即用的演示吗?


更新

在routes.rb中:

resources :posts do
  resources :comments
end

注意:以下内容由我自己手动提供。

rails生成的

配置为:

resources :posts
resources :comments

为什么我修改它是在评论构建表单中,帖子网址应该是“/ posts / 1 / comments”用于创建新评论,否则帖子网址将是“/ comments”,它不会关联帖子和评论。

2 个答案:

答案 0 :(得分:1)

您是否配置了routes?您的config/routes.rb应包含

resources :comments

您还可以运行rake routes根据资源配置查看应用程序的可用网址。

修改

对于演示,您可以尝试this video on youtube。但是,您可以在网上找到很多有关此内容的视频。

修改

所以看来你需要两种方式来评论你的评论资源。两者都作为帖子和顶级资源的嵌套资源。所以你可以把两件事放在一起

resources :posts do
   resources :comments
end
resources :comments

答案 1 :(得分:0)

由于您已嵌套资源,因此应使用:

edit_post_comment_path(@post, comment)

更清楚:

<td><%= link_to 'Edit', edit_post_comment_path(@post, comment) %></td>
<td><%= link_to 'Destroy', post_comment_path(@post, comment), confirm: 'Are you sure?', method: :delete %></td>