2012-09-26 147 views
1

我剛開始使用Rails,我對這種關係感到困惑。 問題很簡單,我有一個代表火車站的Station班,和Shop班。我只希望商店有一個車站,代表最近的火車站,所以我想這將是多對一的關係。Rails中的多對一雙向關係

沒有任何ORM我只是在店鋪表中添加一個外地的電臺。查找有關軌道的關係後,我結束了

class Shop < ActiveRecord::Base 
    belongs_to :station 
end 

class Station < ActiveRecord::Base 
    has_many :shop 
end 

由於正確地說,店裏並沒有真正屬於一個站我發現這樣的怪,所以我想知道這是否是正確的方式繼續或如果我感到困惑。

預先感謝您。

+0

那麼,如果一家商店只能連接到一個(最近的)車站,那麼說它「屬於」它並不奇怪。不是一般意義上的,而是在對象關係 – khustochka

+1

嗯,實際上通過寫''belongs_to''我有種感覺,如果一個電臺被摧毀,它會(或至少可以)串聯到商店,這種類型沒有任何意義。 無論如何,如果這是正確的方式,我想這只是我還不習慣。 –

+1

這裏有一個':dependent'選項(在'has_many'關聯中)。這個選項的':nullify'值將保留商店,即使他們的電臺被銷燬(取消外鍵)。 – khustochka

回答

1

這是正確的處理方式。 「屬於」僅僅意味着「有一把外鍵」 - 這並不一定意味着這是一種用實際方式描述關係的明智方式。

由於發佈,代碼將不會工作 - 你需要複雜has_many方;即:

class Station < ActiveRecord::Base 
    has_many :shops 
end 

您可以測試的關係由發射了鐵軌控制檯實際工作(「軌道C」)從您的應用程序文件夾,並創建對象的試驗。假設你已經創建了相應的表格,你應該能夠做這樣的事情:

station = Station.create 
shop = Shop.create 
shop.station = station 
station.shops 
station.shops.build 

...等

+0

好吧,我想我對'belongs_to'這個名字感到困惑,但我想我明白了,謝謝。 –

1

belongs_tohas_many沒有描述它們相關對象的所有權或範圍或生命週期。他們只是描述對象之間的引用(鍵)。

這樣的引用可以將它們的生命週期與以下依賴關聯:自動保存等選項。 其他選項,例如:read_only將引用的版本權限從另一引用中減少。

所有權是一個你必須自己定義的概念。例如:論壇中的帖子可以「屬於」具有不同特權的不同用戶。誰是主人?管理員?最後一位編輯?創建該帖子的人?對於這種行爲,需要額外的定義和機制。我建議你看看這個CanCan的寶石(https://github.com/ryanb/cancan)。

+0

感謝您的回答。好吧,我會更深入地瞭解依賴和自動保存的內容! –

1
class Station < ActiveRecord::Base 
    has_many :shops, :dependent => "nullify" 
end 

如果你的站被刪除,仍然在商店將是他們