2

我想建立一个形式如下这样的想法:导轨 - 嵌套形式 - 2个水平

  • 我已经分配,​​活动,任务,AssignmentActivity,ActivityTask和AssignmentActivityTask模型
  • 1分配有许多活动和1个活动有许多任务

    • (有之间的许多一对多的关系:
      • AssignmentActivity
      • AssignmentActivity - 任务,
    • 和一个一对多的关系:
      • 活动 - 任务)

我做 http://railscasts.com/episodes/17-habtm-checkboxes

:使用这种想法的分配,活动形式

和形式看起来像这样

_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.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%> <br> 
    <% a.tasks.each do |t|%> 
     #THIS 
     <% check_box_tag "assignment[activity_ids][][]", t.id, "Something here"%><br> 
    <%end%> 
    <%end%> 
<%end%> 

但我不知道怎么写的评论之后的行。

所以当它保​​存它应该分配里面保存的活动,也是任务

是否有这样做的一种方式?

在此先感谢

哈维尔QQ

回答

0

你可以尝试通过分配ID作为PARAMS和使用辅助方法来保存在多个模型的对象。在::的ActionView API助手,你有这样的事情:

check_box(object_name, method, options = {}, checked_value = "1", unchecked_value = "0") 

所以也许尝试在您的代码块是这样的:

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

而在你AssignmentHelper.rb,尝试实施的方法叫传播:

def propagate(id) 
    *Fetch the id of Activity 
    *Fetch the id of Task 
    *Save both objects 
end 

希望这会有所帮助。

+0

是否有任何文档或示例?谢谢 – JavierQQ23 2012-02-22 14:41:42

+0

http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html在文档中,有一个名为“Nested Attributes Examples”的会话,而不是调用Helper方法,您可以使用代码块里面可以做这项工作。 – 2012-02-22 22:32:56

+0

我的意思是关于高清传播,因为这就是我不明白:) – JavierQQ23 2012-02-27 16:34:56

0

您不需要使用任何外部库,因为Rails处理嵌套窗体就好了。

使用fields_for变得更加舒适,您的问题将被排序。

+0

这就是问题......如果放在第一个表单fields_for nothing显示的内部 – JavierQQ23 2012-02-22 14:41:18