Rails表单用于创建自引用模型的子记录

时间:2015-08-28 13:14:04

标签: ruby-on-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 个答案:

答案 0 :(得分:1)

您将使用嵌套表单。有一个伟大的RailsCast:

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

f.fields_for :sub_todo # in your form_for block

要在列表中添加没有父表单的地方,您可以在这里找到表格,然后在这里#34;做

form_for :todo
  hidden_field_for :parent_todo_id, sub_todo_id

...