Ruby on Rails中模型之间的关系

时间:2013-04-29 06:59:38

标签: ruby-on-rails ruby-on-rails-3

我是Rails的新手,正在开发我的第一款应用。我想要实现的是一个像自己的墙和评论团体的Facebook。听起来很简单:)

我目前有3个型号:Group,Post和Comment。这是代码:

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

我设法将评论与帖子正确联系起来。它的观点还可以。但是当我试图将帖子与群组联系起来由于某种原因帖子(带有相应的评论)没有出现。

以下是Show view:

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

帖子部分(Posts forlder中的_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上的其他问题相比,外键可能选择问题。确实如此,但它没有显示帖子。

1 个答案:

答案 0 :(得分:1)

确保posts表格中有一列group_id,然后您就可以删除外键部分。

如果@group没有任何帖子,那么它将不会呈现部分。调用@group.posts将返回一个数组,然后迭代并为每个对象调用render。如果没有帖子,则返回一个空数组,并且不会呈现部分。

将其更改为以下内容:

群组#show view:

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

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

_post.html.erb partial:

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

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

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