2015-01-05 2 views
0

Я пытаюсь получить повсеместное происхождение драгоценных камней в течение последних двух дней. Я проверил один/два учебника, но они старые и имеют много ошибок или делают не работает. Мне удалось заполучить немного родословной, но мне нужна помощь в правильном определении родителей, детей, корней и внуков. Я прочитал документацию, но я не могу получить ее должным образом . Поток моего проекта.Использование родословной для создания отношений родитель-ребенок-внук в рубине

---- Parent1

------ Child1

--------- Grandchild1

------ Child2

- --- Parent2

------ Child1

Теперь я получил Ахольд как создать родительский ID.This является м 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> 

Теперь это был простой, но как я выбрать root и дочерний узел узла и как отображать их соответственно. Я попробовал консоль rails, чтобы получить представление, но есть и другая проблема. Например, Если родительский элемент содержит несколько дочерних элементов, он отображает результат, но если дочерний элемент содержит дочерние элементы, он ничего не показывает, хотя когда родительский ребенок отображается всеми его внуками также получите отображаемые. Я немного смущен этим. Любая помощь оценивается

+0

Вы можете показать, где объявляется переменная '@ messages'? – lcguida

+0

Забыл добавить его.здесь это – soldiershin

+0

Я не мог понять, чего вы пытаетесь достичь здесь. Вы получаете все сообщения и перечислите их. Где в вашем коде вы видите это родительское/дочернее отношение? – lcguida

ответ

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 являются корневые узлы (они не имеют родителей). child 1.1 и 1.2 (являются дочерними родителями 1). Так что если вы хотите получить доступ к ним вы должны сделать:

parent1.children 

grandchild1.2.1 является дочерним узлом child1.2 и его внучка узла Parent1.

Чтобы получить все, от Parent1, вы должны спросить для потомков:

parent1.descendants 

отпрыски являются узлами с тем же родителем, например, ребенок 1.2 и ребенок 1.1.

Пример использования: У вас есть ребенок1.1, и вы хотите, чтобы это были братья и сестры.Вместо того чтобы делать

child1.1.parent.children 

Вы бы:

child1.1.siblings

Это всего лишь несколько примеров, но для того, чтобы полностью понять методы, доступные в родословной драгоценный камень, вы действительно должны изучить и понять структуру данных дерева

+0

Это хорошо, и я знаю, как дерево работает и все, и я не знаю, как видеть деревья в арилах, используя родословную, например, если я вызываю сообщения = Message.where (: ancestry => 20), а затем call page = messages.children, он должен возвращать все дети, но он говорит undefined method.It не так, как я не знаю, как использовать древовидные структуры его, что я не знаю, как установить его с помощью предков – soldiershin

+0

'Message.where' вернет коллекцию записей сообщений. В этой коллекции нет метода 'children'. Поэтому я думаю, что вы путаете рельсы, а не родословную. – lcguida

+0

Я бы очень признателен, если вы покажете мне простой пример с использованием родословной, чтобы я понял. – soldiershin

Смежные вопросы