【发布时间】:2012-02-19 03:31:59
【问题描述】:
我正在创建一个 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% 有效的)
我正在使用 cocoon 来处理嵌套表单。我使用的是 Ryan 的nested_forms,但因为 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> 块。这在格式方面不太理想,但我能想到的最好的。
我将暂时保留这个问题,希望有人能提供更好的解决方案。
感谢到目前为止所有回复的人。
【问题讨论】:
-
您是否尝试将项目 ID 附加到每个表的类中? Class="project_#{project.id}" 并将 project.id 附加到数据属性?
-
感谢 fatfrog,这正是我需要做的,但我无法确定显示 project.id 的语法。您的示例在 html 标记中返回
#{project.id}。我需要在那里放一些 erb,但是速度很慢,无法弄清楚有效的语法。有什么想法吗? -
对不起,我的评论不是很清楚。我可以将 project.id 添加到表类中。但我无法确定将 project.id 添加到函数的数据属性的语法。
-
嗨@fatfrog,使用这种方法,我将如何处理新记录?例如。假设我创建一个新项目,然后需要创建3个任务,项目在保存之前不会有ID,对吗?
-
您可以使用 dom_id(project) 代替 project_{#project.id} - 您熟悉 dom_id 助手吗?它在本 Railscast (4:30) railscasts.com/episodes/…结束时进行了演示
标签: javascript ruby-on-rails nested-attributes