2

當一個實體不與關聯很多其他實體在同一時間,我還應該使用多對多關聯嗎?多對多協會是否仍適用於此?

例如,我瞭解作者與書籍的關係是多對多的,作者可以編寫很多書籍,一本書可以由許多作者編寫。這一直持續下去。

考慮這種情況。批次在特定時間有許多學生。如果一個學生失敗了,他應該搬到下一個小班。換句話說,學生不能同時屬於多個批次。在這種情況下,這是一個多對多的關聯嗎?

替代解決方案我想: 我還想着把兩列學生表。 initial_batchcurrent_batch。由於規則,我可以通過檢查當前批次和初始批次之間的差距來獲取學生的批次歷史記錄。學生必須下降到下一個批次。此外,batch.students與軌道中的has_many關聯存在。所以,我認爲這不會是一個大問題。


按批,我的意思是一批學生在同一年被錄取。

回答

1

我想你仍然想使用一個關聯表(多對多關聯),因爲你可能想保留學生已經採取了哪些類的歷史記錄。

如果您希望它是多對一的並且讓學生一次只能屬於一個班級,那麼您必須在學生表中添加一個class_id字段。這使您可以撥打student.class找到他們當前的班級,但由於該關係不存在,您將無法執行class.students。出於這個原因,我認爲它應該是多對多的。

+0

這是一個很好的點,這是我也在想。我正在考慮學生的'initial_class'和'current_class'專欄,通過檢查當前班和初始班之間的差距,我可以得到學生的班級歷史記錄,因爲,學生必須下降到下一個直接班。另外,'class.students'存在'has_many'關聯。不是嗎? – Anwar

1

這是一個多對多關聯

沒錯。

一個ActiveRecord協會是一個簡單的方法可以讓你創建兩個連接的對象(ActiveRecordORM - 對象關係映射器)。

還記得,因爲Ruby是object orientated,每個「模型」(類)都被視爲一個對象,每當你想用數據填充它時就調用它。每個ActiveRecord的關聯爲每個對象通過方法在對象訪問...

#app/models/student.rb 
class Student < ActiveRecord::Base 
    has_many :subjects #-> AR appends the "subjects" method to your Student object 
end 

簡單地說,這意味着,即使你有許多不同的對象的功能,你不需要有方法填充數據。


如果您有以下...

#app/models/student.rb 
class Student < ActiveRecord::Base 
    has_and_belongs_to_many :subjects 
end 

#app/models/subject.rb # "class" is a reserved word 
class Subject < ActiveRecord::Base 
    has_and_belongs_to_many :students 
end 

這只是提供了什麼是包含@students.subjects

功能/容量這個方法是由您來決定:

<% if @students.subjects.any? %> 
    <% @students.subjects.each do |subject| %> 
    ... 
    <% end %> 
<% end %> 
+0

謝謝你的時間。我實際上有很多模型,不只是一個連接表。該模型具有另一個存儲失敗計數的整數屬性 – Anwar

+0

酷!是的,同樣的邏輯仍然適用 –

+0

這帶來了另一個問題,我如何獲得最新批次的學生。但是,在另一個問題中可能會提到 – Anwar