Ruby on rails 轨道-嵌套形式-2层

Ruby on rails 轨道-嵌套形式-2层,ruby-on-rails,ruby-on-rails-3,forms,ruby-on-rails-3.1,nested-forms,Ruby On Rails,Ruby On Rails 3,Forms,Ruby On Rails 3.1,Nested Forms,我想按照这个想法构建一个表单: 我有分配、活动、任务、分配活动、活动任务和分配活动任务模型 1项作业有许多活动,1项活动有许多任务 以下各项之间存在多对多关系: 作业-活动 分配活动-任务, 以及一对多关系: 活动-任务 我用这个想法制作了作业活动表: 表格是这样的 _form.html.erb <% form_for @assignment do |f|%> <% Activity.all.each do |a|%> <% check_box_tag

我想按照这个想法构建一个表单:

我有分配、活动、任务、分配活动、活动任务和分配活动任务模型 1项作业有许多活动,1项活动有许多任务

以下各项之间存在多对多关系: 作业-活动 分配活动-任务, 以及一对多关系: 活动-任务 我用这个想法制作了作业活动表:

表格是这样的

_form.html.erb

<% form_for @assignment do |f|%>
  <% Activity.all.each do |a|%>
    <% check_box_tag "assignment[activity_ids][]", a.id,  @assignment.activity_ids.include?(a.id)%> | <% a.name%>
  <%end%>
<%end%>
<% form_for @assignment do |f|%>
  <% Activity.all.each do |a|%>
    <%= check_box_tag "assignment[activity_ids][]", a.id,  @assignment.activity_ids.include?(a.id)%> | <% a.name%> <br>
    <% a.tasks.each do |t|%>
      #THIS
      <% check_box_tag "assignment[activity_ids][][]", t.id, "Something here"%><br>
    <%end%>
  <%end%>
<%end%>
所以它保存在作业中,我检查过的所有活动

当我试图在表单中添加保存任务的功能时,问题就出现了。 这就是我尝试过的

_form.html.erb

<% form_for @assignment do |f|%>
  <% Activity.all.each do |a|%>
    <% check_box_tag "assignment[activity_ids][]", a.id,  @assignment.activity_ids.include?(a.id)%> | <% a.name%>
  <%end%>
<%end%>
<% form_for @assignment do |f|%>
  <% Activity.all.each do |a|%>
    <%= check_box_tag "assignment[activity_ids][]", a.id,  @assignment.activity_ids.include?(a.id)%> | <% a.name%> <br>
    <% a.tasks.each do |t|%>
      #THIS
      <% check_box_tag "assignment[activity_ids][][]", t.id, "Something here"%><br>
    <%end%>
  <%end%>
<%end%>
但我不知道在评论之后该如何写这句话

因此,当它保存时,应该将活动和任务保存在分配中

有没有办法做到这一点

提前谢谢


Javier QQ

您可以尝试将分配id作为参数传递,并使用助手方法保存多个模型中的对象。在ActionView::Helpers API中,您有如下内容:

check_box(object_name, method, options = {}, checked_value = "1", unchecked_value = "0")
因此,在您的代码块中可以尝试以下内容:

<% check_box_tag "assignment[activity_ids][][]", propagate(t.id)%>

希望这有帮助。

您可以尝试将分配id作为参数传递,并使用帮助器方法保存多个模型中的对象。在ActionView::Helpers API中,您有如下内容:

check_box(object_name, method, options = {}, checked_value = "1", unchecked_value = "0")
因此,在您的代码块中可以尝试以下内容:

<% check_box_tag "assignment[activity_ids][][]", propagate(t.id)%>

希望这有帮助。

我推荐ryanb。它会很快很好地解决你想要做的事情。

我推荐ryanb。它会很快很好地解决您想要做的事情。

您不需要使用任何外部库,因为Rails可以很好地处理嵌套表单


熟悉使用字段,您的问题就会得到解决。

您不需要使用任何外部库,因为Rails可以很好地处理嵌套表单


熟悉使用字段,您的问题就会得到解决。

这就是问题所在。。。如果在第一个表单中放入一个字段,那么字段将显示为“免费”,这就是问题所在。。。如果在第一个表单中放置了一个字段,那么没有显示任何内容,是否有任何文档或示例?感谢在文档中,有一个称为嵌套属性示例的会话,您可以在其中使用代码块来完成工作,而不是调用帮助器方法。我的意思是关于def propagate,因为这是我不理解的:是否有任何文档或示例?感谢在文档中,有一个称为嵌套属性示例的会话,您可以在其中使用代码块来完成工作,而不是调用帮助器方法。我的意思是关于def propagate,因为这是我不理解的: