【问题标题】:Simple posts / comments route in rails 3rails 3中的简单帖子/评论路线
【发布时间】:2010-09-09 00:47:30
【问题描述】:

我正在尝试编写一个路由来捕获您的普通博客中的帖子和 cmets 之间的一对多关系

我目前拥有的是一个 post.rb

class Post < ActiveRecord::Base
  has_many :comments
end

后跟一个comment.rb(在所有其他数据库设置中,包括post_id:integer 用于评论)

class Comment < ActiveRecord::Base
  belongs_to :post
end

在我尝试使用的路线中

resources :posts do
  resources :comments
end

但我没有任何运气 - Rails 3 专家有什么帮助吗?

编辑

当我通过这个网址点击我的帖子控制器的“显示”操作时

http://localhost:3000/posts/3

我收到路由错误

No route matches {:controller=>"comments", :action=>"create"}

这是因为我的帖子显示模板中有我的 cmets 表单

<% form_for Comment.new do |f| %>
<p>
  <%= f.label :body, "new comment" %><br>
  <%= f.text_area :body %>
</p>
<p><%= f.submit "add comment" %></p>
<% end %>

我是否需要更改我的表单,因为在此更改路线之前,当我执行简单视图源时,操作指向 /cmets/{id}

编辑#2

我确实注意到,在我将路线更改为如下所示后

 resources :comments
  resources :posts

  resources :posts do
    resources :comments
  end

除了我创建的评论不知道 post_id 之外,我得到了一切正常(在 MySQL 中,评论是持久的,但它不知道它所属的帖子)

这可能是我的表格吗?

【问题讨论】:

  • 这是来自 ROR 指南教程吗?
  • 示例是的 - 但我正在尝试使用 3.0 框架执行此操作,并在我的新 rails 应用程序的 cmets 中找到了这条路线“示例”(但它不起作用)
  • 您的路径在视图中看起来如何?
  • 看来你有basic routing for nested resources的权利。您能否详细说明“我没有运气”?

标签: ruby-on-rails routing


【解决方案1】:

您的评论资源被定义为嵌套资源而不是独立资源,

所以生成的路径也需要帖子信息。所以将 form_for 语句更改为

form_for [@post,Comment.new] 做 |f|

http://guides.rubyonrails.org/routing.html,阅读本文了解更多

还有这个http://railscasts.com/episodes/139-nested-resources(使用非常旧版本的rails)

【讨论】:

  • 这修复了我在显示模板中的表单,但是像我在上面的示例中那样定义所有 3 个资源是否“有效”?如果不是,你有什么建议?
  • 第一种方式是 rails 方式,但有时它会因嵌套资源而变得相当复杂,因此人们会切换到您所做的事情。因此,除非您知道更好地使用 rails 方式。
  • 并且您不需要再次定义“resources :posts”。使用#1 嵌套资源方式,可以更轻松地管理模型内的关联和授权。但是在#2中,您将能够做到这一点。手动。所以选择吧
猜你喜欢
  • 2023-04-10
  • 2014-06-11
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 2011-11-09
相关资源
最近更新 更多