的兩代人之間真實的關係,使用Rails 3.1.1的Rails:造型複雜的關聯,以適應動物
我模擬動物(狗個人)和凋落物(後代的羣體)之間的關聯。它變得複雜,因爲動物都出生在一個垃圾和家長可以多胎(無論是作爲母親或父親)。
這裏是我的架構的相關部分:
ActiveRecord::Schema.define do
create_table "animals", :force => true do |t|
...
t.integer "litter_id"
t.string "sex"
...
end
create_table "litters", :force => true do |t|
...
t.integer "father_id"
t.integer "mother_id"
...
end
end
,這裏是合適的機型,擁有什麼,我認爲可以工作作爲協會:
class Animal < ActiveRecord::Base
...
belongs_to :litter
has_many :litters, :foreign_key => :father_id
has_many :litters, :foreign_key => :mother_id
has_one :father, :through => :litter, :foreign_key => :father_id
has_one :mother, :through => :litter, :foreign_key => :mother_id
...
end
class Litter < ActiveRecord::Base
...
has_many :animals
belongs_to :father, :class_name => 'Animal'
belongs_to :mother, :class_name => 'Animal'
...
end
我將運行如果我在其各自的模型中將belongs_to
和has_many
關聯加倍,那麼它們會出現問題?如果是這樣,我該如何正確建模這些關聯?
UPDATE:正如下面的評論中提到,我使用的產仔模型跟蹤約10個屬性是共同的每一種動物在垃圾。這個軟件將由狗飼養員運行,所以垃圾本身就是一個相關的單元,從幾個角度來看,當涉及到在視圖中呈現數據時,它會帶來很多的負擔(超越父母/孩子的關係)。
無論如何,我都想跟蹤有關Litters的數據,這是有理由的(在這個問題的範圍之外)。鑑於無論如何都會有一個Litter模型,是不是最好重複一下母親/父親組合,以確定該窩裏的每隻小狗都分享? (這並不意味着我是一個非常正常的數據結構,因爲更新一個垃圾的父親,例如,然後需要更新該垃圾中每個動物的記錄...但我不是專家。) – jasonmklug
I這取決於你的軟件模型反映了真實世界的多少/你想要建模哪種情況。我的意思是,你父親什麼時候改變?它會在動物的創造(誕生)時被設定,並且永遠不會改變,正確嗎?我認爲,我們不是在談論離婚,繼父和類似的事情嗎?我認爲有可能知道一條狗是活着的,但不知道它的父親是誰(這意味着它會以「零」開始並最終變成某種東西),所以在那種情況下,是的,將「垃圾」作爲中間對象是完全有效的。 – jefflunt
父親不一定會改變 - 這只是一個屬於恰好在可能*改變的問題範圍內的屬性。垃圾列將包括諸如'expected_birth_date','breed_id','notes'等等(並非所有這些都會改變,顯然,但其中的一些可能)。我的'litters'表中有10列,所以這是一個重複的數據,在一個給定的垃圾中''動物'的所有_always_共有。 – jasonmklug