2015-08-28 60 views
0

我在我的Rails應用程序下面的模型:Rails的形成創建的自我指涉模型子記錄

class Todo < ActiveRecord::Base 
    has_many :sub_todos, class_name: 'Todo', foreign_key: 'parent_todo_id' 
    belongs_to :parent_todo, class_name: 'Todo' 
end 

我研究的方式做一個WBS(工作分解結構)的應用程序,到目前爲止,有索引視圖:

<h1>Todos</h1> 

<%= form_for @todo do |f| %>                                  
    <%= f.label :content, 'Todo', class: 'control-label' %>                          
    <%= f.text_field :content, class: 'form-control', size: 50 %>                         
    <%= f.submit 'Save' %>                                   
<% end %>                                      

<% @todos.where(parent_todo_id: nil).each do |todo| %>                           
    <p><%= todo.content %></p>                                  
    <ul>                                       
    <% todo.sub_todos.each do |sub_todo| %>                              
     <li>                                      
     <%= sub_todo.content %> 
     <!--form goes here--> 
     </li> 

     <ul> 
     <% sub_todo.sub_todos.each do |sub_todo| %> 
      <li><%= sub_todo.content %></li> 
     <% end %> 
     </ul> 
    <% end %> 
    </ul> 
<% end %> 

我需要將項目拆分爲更小的項目。要做到這一點,我想在每個表單下方放置一個表單,以便創建一個新的「sub_todo」。

我的問題是:我如何製作一個自我指涉模型?我以前使用過嵌套資源的表單,但似乎無法弄清楚自我參照模型的情況。

另外,這是循環這種類型的記錄適當的ruby/rails的方式?

回答

1

你會使用嵌套窗體。沒有爲這個偉大的RailsCast:

http://railscasts.com/episodes/196-nested-model-form-part-1

f.fields_for :sub_todo # in your form_for block 

要在列表中沒有父的形式,那就是你有 「形式放在這裏」 加做

form_for :todo 
    hidden_field_for :parent_todo_id, sub_todo_id 

...

+0

你能更具體嗎?我不確定我是否遵守。如果我想在同一個表單上創建待辦事項和子對象,看起來這將是一個解決方案,但事實並非如此。我想要一個表單來創建待辦事項,如果有parent_todo_id屬性的話。 –

+0

對不起,我誤解了。所以,就像上面那樣做一個表單,然後把一個hidden_​​field_for:parent_todo_id,sub_todo_id – dinomix

+0

這樣做。謝謝 :) –