过去两天我试图获得一个祖先宝藏。我已经检查了一两个教程,但它们已经老了,有很多错误或者没有工作。我已经能够得到一个我很少有祖先,但我想要一些帮助,如何正确定义父母,孩子,根和孙子。我已经阅读了文档,但我无法掌握它。我的项目的流程是。
---- Parent1
------ Child1
--------- Grandchild1
------ CHILD2
---- Parent2
------ Child1
现在我已经了解了如何创建父ID。这是我的代码。
def index
@messages = Message.all
end
def show
@page = Message.where(:ancestry => params[:id])
end
def new
@message_id = Message.find(params[:id])
end
def create
@page = Message.new(message_params)
@page.parent_id = params[:parent_id]
#@page = Message.new(message_params)
if @page.save
flash[:notice] = "The Mesage was created succeffully"
redirect_to(:action => 'index')
else
render('new')
end
end
这是显示数据的索引文件,也可以发布消息。
<div class="Pages index">
<h2>Messages</h2>
<%= link_to("Add new Page",{:action => 'new'}, :class => 'action new') %>
<table class="listing" summary="Page list">
<tr class="header">
<th> </th>
<th>ID</th>
<th>Content Title</th>
<th>Content</th>
<th>Parent Id</th>
</tr>
<% @messages.each do |page| %>
<tr>
<td><%= page.id %>
<td><%= page.content_title %>
<td class="center"><%= page.content %>
<td class="center"><%= page.parent_id %>
<td class="actions">
<%= link_to("Reply",{:action => 'new',:id => page.id},:class =>'action show') %>
<%= link_to("Show",{:action => 'show',:id => page.id},:class =>'action show') %>
</td>
</tr>
<% end %>
</table>
</div>
<div class="Pages new">
<h2> Create Pages</h2>
<%= form_for(:message, :url => {:action => 'create'}) do |f| %>
<table summary="Page form fields">
<tr>
<th>Content_title</th>
<td><%= f.text_field(:content_title) %></th>
</tr>
<tr>
<th>Content</th>
<td><%= f.text_field(:content) %></th>
</tr>
</table>
<div class="form-buttons">
<%= submit_tag("Submit Form") %>
</div>
<% end %>
</div>
这是回复文件,当用户按下回复按钮时,会传递parent_id
<div class="Pages new">
<h2> Create Pages</h2>
<%= form_for(:message, :url => {:action => 'create',:parent_id => @message_id}) do |f| %>
<table summary="Page form fields">
<tr>
<th>ParentID</th>
<td><%= f.text_field(:id) %></th>
</tr>
<tr>
<tr>
<th>Content Title</th>
<td><%= f.text_field(:content_title) %></th>
</tr>
<tr>
<th>Content</th>
<td><%= f.text_field(:content) %></th>
</tr>
</table>
<div class="form-buttons">
<%= submit_tag("Submit Form") %>
</div>
<% end %>
</div>
下载节目文件
<%= link_to("Back to List",{:action => 'index'}, :class => 'action new') %>
<div class="Pages show">
<h2> Show Pages</h2>
<table summary="Pages detail view">
<th>Parent ID</th>
</tr>
<tr>
<th>Message Content Title</th>
</tr>
<tr>
<th>Content</th>
</tr>
<% @page.each do |page| %>
<tr>
<td><%= page.id %>
<td><%= page.content_title %>
<td class="center"><%= page.content %>
<td class="center"><%= page.parent_id %>
</td>
</td>
</td>
</td>
</tr>
<%end%>
</table>
现在这很简单,但我如何选择节点的根和子节点以及如何相应地显示它们。 我已经尝试过rails console来获得一个想法,但还有另外一个问题。例如 如果父项包含多个子项,则显示结果,但如果子项包含子项,则它不会显示任何内容,但显示父项时,其所有孙子项也会显示。我对此感到困惑。感谢任何帮助< / p>
答案 0 :(得分:1)
对于我所看到的,我认为您不了解树数据结构。
我建议您阅读:http://en.wikipedia.org/wiki/Tree_(data_structure)
例如,您有以下树:
-parent 1
-child 1.1 (parent -> parent 1)
-child 1.2 (parent -> parent 1)
-granddchild 1.2.1 (parent -> child 1.2)
-parent 2
-child 2.1
因此,在此示例中,父级1和2是根节点(它们没有父节点)。孩子1.1和1.2(父母1的孩子)。因此,如果您想访问它们,您应该这样做:
parent1.children
grandchild1.2.1是节点child1.2的子节点,它是节点parent1的孙子节点。
要从parent1中获取所有内容,您应该要求后代:
parent1.descendants
兄弟姐妹是具有相同父节点的节点,例如子1.2和子1.1。
使用示例:你有child1.1,你想要它的兄弟姐妹(兄弟)。而不是做
child1.1.parent.children
你会这样做:
child1.1.siblings
这些只是一些例子,但为了充分理解祖先宝石中可用的方法,你真的应该研究和理解树数据结构