2011-10-30 65 views
0

我正在構建一個應用程序,其中有分層模塊(與荒謬模型一起裸露,但概念相同),如動物有跟蹤器,跟蹤器有手機,每個都有自己的序列號...(Animal animal_id:10,Tracker serial_number:12,Cellphone imei:123456789123456)Rails has_one/belongs_to概念辯論

定義關係的可接受方式是什麼?

我現在使用的這個方案:

Animal has_one Tracker, Tracker has_one Cellphone 

Cellphone belongs_to Cellphoneable, Tracker belongs_to Trackable 

(這是多態的關係)

什麼我無法理解的是,我存儲在手機上表中的cellphoneable_id,但我開始認爲這種關係應該存在於Tracker表中,並且讓Cellphone保持獨立,並讓上層關係下降。

我將不勝感激了很多,如果你們能幫助我辯論下來......

+0

只是讓我理解你正確:手機實際上是從Cellphoneable和Tracker繼承可追蹤的,對不對?然後,這不是rails中的'belongs_to'關係,而是STI(單個表繼承)。 – nathanvda

+0

不,它不是繼承,它們實際上是不同的模型 –

回答

0

以下是我會怎麼做,如果:

  1. 跟蹤器屬於單個動物和單手機
  2. 如果動物只能有一個跟蹤器
  3. 如果蜂窩電話可以連接到多個跟蹤器,並且因此多個動物

下面的代碼:

class Tracker < ActiveRecord::Base 
    belongs_to :animal 
    belongs_to :cellphone 
end 

class Animal < ActiveRecord::Base 
    has_one :tracker 
    has_one :cellphone, :through => :tracker 
end 

class Cellphone < ActiveRecord::Base 
    has_many :trackers 
    has_many :animals, :through => :trackers 
end 
+0

但是,它們的構建方式,只有一個手機跟蹤器,一個跟蹤器到動物(這裏沒有冗餘)... –

+0

然後我會刪除手機型號,並將手機信息作爲列添加到跟蹤器表。動物有他們自己的表,但改變'has_many:跟蹤器'到'has_one:跟蹤器' – sled

+0

我不會那樣做,導致短信的具體方法只對手機有用...我會在模型之間混合功能。 .. –