How to position nested form elements in Rails 3



我正在创建一个Rails 3应用程序,该应用程序使用具有两级嵌套属性的嵌套表单,即

<%= form_for @workareas do |f| %>
   <%= f.text_field :workarea_name %>
   <%= f.fields_for :projects  do |project| %>
      <%= f.text_field :project_name %>
      <%= f.fields_for :tasks  do |task| %>
         <%= f.text_field :task_name %>   
         <%= f.check_box :complete %>
         <%= f.check_box :urgent %>
         <%= f.check_box :today %>
      <% end %>
   <% end %>
<% end %>

(我意识到这个伪代码不是100%有效的)

我正在使用茧来处理嵌套表单。我使用了Ryan的嵌套表单,但由于Coccon似乎能够更好地处理这个问题,所以我进行了切换。

我想在一个表中显示任务,类似于:

<table class="tasks">
  <tr>
    <th><%= f.label :task_name %></th>
    <th><%= f.label :complete %></th>
    <th><%= f.label :urgent %></th>
    <th><%= f.label :today %></th>
  </tr>
  <%= f.fields_for :tasks do |task| %>  
    <tr>
       <td><%= f.text_field :task_name %></td>
       <td><%= f.check_box :complete %></td>
       <td><%= f.check_box :urgent %></td>
       <td><%= f.check_box :today %></td>
    </tr>
  <% end %>
</table>
<%= link_to_add_association "New Task", f, :tasks %>

在布局的正确位置插入新任务时遇到问题。这是因为将有多个任务表,视图中每个项目下都有一个任务表。

我意识到我可以使用脚本来指定添加字段的位置:

$(function() {
    $("a.add_fields.").
      data("association-insertion-position", 'after').
      data("association-insertion-node", '.tasks tr:last');
});

但是不知道如何传递任务属于哪个项目。例如,如果我有两个项目,并试图将任务添加到第二个项目,则字段当前正在添加到第一个项目。(保存时它们与项目2正确关联,但这纯粹是布局问题)。

以前有人遇到过这个问题吗?是否有更好的选择器用于"关联插入节点"。我欢迎任何意见或建议。

谢谢!!

更新

我仍然没有找到解决这个问题的办法。从本质上讲,我想做的是将包含在<tr>块中的嵌套子元素添加到父窗体中。我无法按我希望/期望的方式进行此操作。

作为一个临时解决方案,我现在呈现<li>块中的子元素。<li>块包含用于每个孩子的完整的<table><tbody><tr>块。就格式而言,这并不理想,但这是我所能想到的最好的。

我将暂时不提这个问题,希望有人能提供更好的解决方案。

感谢到目前为止所有回复的人。

我不知道你的表是如何显示的,我的JS有点生疏,但你可以在链接中传递一个数据属性,如下所示:

<%= link_to_add_association "New Task", f, :tasks, 'data-project_id' => "project_#{project.id}" %>

然后在你的功能中:

var project_id = $(this).data("project_id");
$("#" + project_id + " a.add_fields.").

他们这样做的一个很好的教程是在CodeSchool.com上使用jQuery Air:Captain's Log

我没有找到一个简单的方法来解决这个问题。

最后,我不得不用一个自定义函数来替代cocoon的javascript,该函数本质上构建了一个新的关联对象名称,并将新的关联目标附加到现有序列中。

这不是一个简单的解决方案。我将与Cocoon的开发人员分享它,也许gem可以更新以提供此功能。

谢谢你的建议。

最新更新