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