2015-01-05 2 views
0

나는 지난 2 일 동안 조상 보석을 찾으려 고 노력하고 있습니다. 하나 또는 두 개의 자습서를 확인했지만 그들은 오래되었고 실수 나 할 일이 많습니다. 작동하지 않습니다. 나는 약간의 조상을 잡을 수 있었지만 부모, 자녀, 뿌리 및 손자를 올바르게 정의하는 방법에 대한 도움을 원합니다. 설명서를 읽었지만 제대로 처리 할 수 ​​없습니다. 내 프로젝트의 흐름입니다.루비에서 부모 - 자식 - 손자 관계를 생성하기 위해 조상 보석 사용하기

---- 상위 1

------ 자식 1

--------- Grandchild1

------ 자식 2

-

지금 내가 홀드 (Ahold) 부모 ID.This을 만드는 방법으로 입수했습니다 자식 1

--- Parent2

------는 m입니다 y 코드.

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>&nbsp;</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> 

을 Heres 쇼 파일

<%= 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> 

을 통과 누르면 응답 파일입니다하지만 난 어떻게 선택합니까 노드의 루트 및 하위 노드와이를 표시하는 방법을 설명합니다. 아이디어를 얻기 위해 레일 콘솔을 사용해 보았습니다. 예 : 부모가 여러 자식을 포함하는 경우 결과를 표시하지만 자식이 자식을 포함하는 경우 상위 자식이 모든 손주를 표시 할 때 아무 것도 표시하지 않습니다 또한 표시됩니다. 나는 이것으로 혼란스러워합니다. 도움이 인정됩니다.

+0

'@ messages' 변수가 어디에 선언되어 있는지 보여 줄 수 있습니까? – lcguida

+0

그것을 추가하는 것을 잊었다. 여기있다 – soldiershin

+0

나는 당신이 여기에서 달성하는 것을 시도하고 있다는 것을 이해할 수 없었다. 당신은 모든 메시지를 받고 그들을 나열합니다. 코드에서이 부모/자식 관계가 표시되는 것을 어디에서 볼 수 있습니까? – lcguida

답변

1

내가보기에, 당신은 트리 데이터 구조를 이해하지 못한다고 생각합니다. 그들은 부모가없는 (

-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 루트 노드입니다 : 다음과 같은 트리를 사용하면 예를 들어 http://en.wikipedia.org/wiki/Tree_(data_structure)

:

나는이 글을 읽고 추천). 자녀 1.1 및 1.2 (부모 1의 자녀들). 당신이 그들에 액세스하려면 당신이해야 그래서 :

parent1.children 

grandchild1.2.1는 노드 child1.2의 자녀이며 노드의 상위 1의 손자입니다.

는 상위 1에서의 모든 것을 얻으려면, 당신은 자손을 요청해야합니다

parent1.descendants 

형제는 예를 들어, 아이 1.2 및 아이 1.1, 같은 부모 노드입니다.

사용 예 : 당신은 child1.1을 가지고 있으며 형제 (형제)가되기를 원합니다.대신

child1.1.parent.children 

을하는 당신은 할 것 :

child1.1.siblings

이들은 단지 몇 가지 예입니다,하지만 완전히 조상 보석에서 사용할 수있는 방법을 이해하기 위해, 당신은 정말해야 트리 데이터 구조를 연구하고 이해하십시오.

+0

이것은 좋은 결과를 얻었고 나무가 어떻게 작동하는지 알 수 있습니다. 예를 들어, 내가 message = Message.where (: ancestry => 20)를 호출하고 예를 들어 같은 조상을 사용하여 arils에서 나무를 보는 법을 알았습니다. 전화 페이지 = messages.children 그것은 모든 아이들을 반환해야하지만 그것은 정의되지 않은 method.It 말은 내가 어떻게 조상을 사용하여 그것을 설정하는 방법을 모르겠 나무 구조를 사용하는 방법을 모르겠어요 – soldiershin

+0

'Message.where' 메시지 레코드 컬렉션을 반환합니다. 이 콜렉션에는'children' 메소드가 없습니다. 그래서 나는 당신이 선조의 보석이 아닌 혼란스러운 선상에 있다고 생각합니다. – lcguida

+0

만약 당신이 나에게 생각을 얻을 수 있도록 조상 보석을 사용하여 간단한 예제를 보여 주면 나는 정말로 감사 할 것이다. – soldiershin