2012-07-02 165 views
0

Helo,我一直堅持這個問題。 只是爲了讓事情變得簡單,我會把它解釋得更簡短。在一對一的關係上創建多個對象

Student has_many :grades 
     belongs_to :class 

Grade belongs_to :student 
     belongs_to :rubric 

Rubric belongs_to :course 
     has_many :students, :through => :class 

要創建新的成績,我們需要找到存在的學生。我們可以打電話給@ class.students來這樣做。此外,應使用rubric_id創建等級。

我已經找到了如何做嵌套窗體。但是如何將複數的學生身份證傳遞到新的成績?

如何建立控制器和視圖來做到這一點?

+0

我不認爲你的模型設置正確,以實現這一點。在你所問的場景中,學生和成績似乎處於多對多的關聯中。即一個學生有很多標題,但是一個標題有很多學生,都是通過評分(這是你的關聯模式)。我理解這個正確嗎? – yuklai

+0

即, 類的has_many:學生 的has_many:欄目,:通過=>:級 學生的has_many:欄目,:通過=>:欄目 belongs_to的:類 #A級是分配給學生特定類的特定量規 級belongs_to的:學生 belongs_to的:專欄 belongs_to的:類 專欄belongs_to的:當然 的has_many:學生:通過=>:專欄 讓我知道如果我上面的解釋是正確的,我可以在一個答案跟進控制器和視圖。我最近爲另一個項目做了非常類似的事情。 – yuklai

回答

0

(阿根廷,我不能正確格式化我的問題的意見,所以我必須使用一個答案。小熊請與我,因爲我不認爲這回答你的問題呢。)

我不不認爲你的模型設置正確,以實現這一點。在你所問的場景中,學生和成績似乎處於多對多的關聯中。即一個學生有很多標題,但是一個標題有很多學生,都是通過評分(這是你的關聯模型)。我理解這個正確嗎?

Class has_many :students 
     has_many :grades 
     has_many :rubrics, :through => :grade 

Student has_many :grades 
     has_many :rubrics, :through => :grade 
     belongs_to :class 

# A grade is a particular rubric assigned to a student for a particular class 
Grade belongs_to :student 
     belongs_to :rubric 
     belongs_to :class 

Rubric belongs_to :course 
     has_many :grades 
     has_many :students, :through => :grade 

讓我知道如果我上面的解釋是正確的,我可以用控制器和視圖上的答案跟進。我最近爲另一個項目做了非常類似的事情。

編輯:現在我們已經澄清了這個問題,這裏是我的建議答案。 目標是爲多個學生分配特定課程中的標準。

沒有內置的方法來支持這樣的事情,所以我們將不得不建立記錄和與正確的控制器行爲和表單的關聯。

在等級模型中,我們添加此功能: DEF self.checked(類標識碼,student_id數據,rubric_id) Grade.find(?:全部:條件=> {:=類標識碼>類標識碼,:student_id數據=> student_id數據, :rubric_id => rubric_id})。present? 結束

在的form_for:在RubricsController的創建行動

<%= form_for @rubric do |f| %> 
    <% for @class.students.each do |student| %> 
    <%= fields_for :grades do |builder| %> 
    <%= check_box_tag "grades[" + @class.id.to_s + "][]", rubric.id, Grade.checked?(@class.id, student.id, @rubric.id) %> 
    <% end %> 
    <%= f.submit "Save" %> 
<% end %> 

現在,你應該有一個PARAMS:專欄中,我們創造這樣的事情[:等級]這是關鍵的哈希[:類]其價值應該只是一系列學生ID。現在,您可以創建與這些模型關聯的成績對象,因爲您擁有一個標題ID(@ rubric.id),一個類ID(@ class.id)和一組學生ID。

我希望我沒有擰上面的代碼,因爲我不得不從我目前的實施中改變它。但是查看rails服務器的控制檯日誌應該可以讓你找出提交上面的表單並進行調整時傳遞的參數。

+0

感謝您的快速回復。 你的解釋基本上是正確的,除了 學生has_many:rubric,:through =>:rubric。 它應該是:年級,:通過=>:rubric 只是爲了確保:例子的專欄:Class_id:「5」,名稱:「作文1」,max_grade =「15」。等級示例:student_id =「54」,評價= 10。 – zgalem

+0

對不起,我似乎在我原來的解釋中犯了一些錯誤。我編輯了上述內容。你能看出這是否正確?它聽起來不同於上面的評論。主要是,你提到Student has_many:grade,:through =>:rubric。 – yuklai

+0

現在看起來不錯,除了:class has_many:rubrics(without:through option) – zgalem