0

我是 Rails 新手,正在开发我的第一个应用程序。我想要实现的是一个像 Facebook 一样有自己的墙和评论的群组。听起来很容易:)

我目前有 3 个模型:群组、帖子和评论。这是代码:

class Group < ActiveRecord::Base
  attr_accessible :affiliation, :group_name, :group_type, :string

  validates :group_name, :presence => true
  has_many :posts, :dependent => :destroy, :foreign_key => "id"
end

class Post < ActiveRecord::Base
  attr_accessible :body, :posted_by, :posted_by_uid

  validates :body, :presence => true
  belongs_to :group
  has_many :comments, :dependent => :destroy
end

class Comment < ActiveRecord::Base
  attr_accessible :body, :commenter

  belongs_to :post
end

我设法正确地将评论与帖子联系起来。它的观点是OK的。但是当我出于某种原因尝试将帖子与群组相关联时,帖子(带有相应的评论)没有显示出来。

这是显示视图的片段:

<b>Posts</b>
<%= render @group.posts %>

帖子部分(帖子目录中的_post.html.erb)

<h1>New post</h1>
<%= render 'form' %>

<p>
  <b> Content </b>
  <%= @post.body %>
</p>

<h2>Comments</h2>
<%= render @post.comments %>  

<h2>Add a comment:</h2>
<%=  render "comments/form" %>
<br />

PS我不知道为什么我添加了外键,但是没有它我会得到错误(列group.posts.id不存在),我只是以某种方式发现它与stackoverflow上的其他问题相比,外键可能会选择问题. 确实如此,但它没有显示帖子。

4

1 回答 1

1

确保 posts 表有一个 column group_id,那么您应该能够删除外键部分。

如果@group没有任何帖子,则不会呈现部分内容。调用@group.posts将返回一个数组,然后对其进行迭代并为每个对象调用渲染。如果没有帖子,则返回一个空数组,并且不会呈现部分内容。

将其更改为以下内容:

组#显示视图:

<h1>New post</h1>
<%= render 'posts/form' %>

<b>Posts</b>
<%= render @group.posts %>

_post.html.erb 部分:

<p>
  <b> Content </b>
  <%= @post.body %>
</p>

<h2>Comments</h2>
<%= render @post.comments %>  

<h2>Add a comment:</h2>
<%= render "comments/form" %>
<br />
于 2013-04-29T07:07:30.317 回答