2010-08-16 57 views
1

我有一個Ruby on Rails應用程序,其中代碼直接直接訪問多對多連接表。這使得修改某些代碼非常困難,因爲它繞過了通過has_many和has_many:through關係創建的常規關聯和方法。直接訪問多對多連接表的任何好理由?

我的問題很簡單,這是一個可以接受的事情要做還是應該避免?

在我看來,從數據庫的角度來看,邏輯視圖中不存在連接表。因此,應該沒有理由直接訪問它們。人們應該忽略它們甚至存在並讓框架照顧它們。

別人怎麼看?

更確切地說,我想知道如果下面都不應出現在代碼:

Person { name } 
Group { name } 
PersonGroup { person_id, group_id, membership_state } 
PersonGroup.find(:all, :conditions => {:membership_state => 'pending'} } 

我想,而不是使用連接表,一個應改爲範圍的要求對本集團並找到所有未決成員的方式。

回答

0

我會去「應該避免」。如果你真的需要操縱連接表中的數據,我會建議創建一個映射到該表的ActiveRecord對象,然後操作該對象。一般來說,當使用Object/Relational框架(而不僅僅是ActiveRecord)導致複雜性時,我發現了直接的數據操作。

+0

我在我的問題上有點不清楚。我指的是使用activerecord模型來表示連接表,絕對不能直接訪問表。 – 2010-08-16 16:50:31

+0

這很有意義,因爲PersonGroup不僅僅充當連接表,而且充當具有狀態的對象,在這種情況下爲membership_state。成爲自己的對象而不僅僅是一個命名的範圍是明智的。 – 2010-08-16 20:42:51