我有一个与自己相关联的评论表,用于回复。基本上,具有 parent_id 的评论也是对他的父评论的回复。
为了渲染这个,我使用了一个递归视图,它在过去很简单,但不适用于 rails 3.2.0 和 ruby 2.1.1
这是简化的代码:
<% x = comment.replies %>
<%= comment.id %>; <%= comment.class %><br/>
<%= comment.replies.class %><br><br>
<hr>
<br><br>
<% if x and x.is_a?(Array) %>
<%= render :partial => "/_redesign/entry/comment", :collection => x, :as => :comment%>
<% end %>
输出是:
349223; 注释
数组
349229;评论
评论
在第二次迭代中,comment.replies
是一个评论,而不是一个数组,并且全部从那里掉下来。
但是,如果我更改第一行并添加重新加载:
<% x = comment.reload.replies %>
一切开始工作,输出是:
349223; 注释
数组
349229;注释
数组
349230;评论
数组
我很想了解这里发生了什么以及关联如何返回单个对象实例而不是它们的列表以及为什么使用重新加载。
添加模型代码:
class Comment < Response
acts_as_deactivatable :dependencies => [:community_news_feed_items]
has_many :replies, :class_name=>"Comment", :foreign_key=>"referring_c_id", :order=>"date ASC"
belongs_to :parent_comment, :class_name=>"Comment", :foreign_key=>"referring_c_id"
end