簡體   English   中英

在軌道上與紅寶石建立對稱關系的最佳方法是什么?

[英]What is the best way to model a symmetric relation with ruby on rails?

我正在尋找一種在Rails中建模對稱關系 (如用戶之間的友誼)的優雅方法(盡管這可能更像是一個一般的數據庫問題)。 我知道幾種方法,但似乎都不太優雅:

  1. 用用戶的外鍵創建一個user_user關系表。 我不喜歡它,因為它本質上是一個非對稱解決方案。 我看到了一種方法,該方法將具有較低ID的用戶強制進入第一列,而另一用戶強制進入第二列,並使用union從兩端查詢關系。 感覺就像是駭客。

  2. 創建一個友誼表,其中每一行代表一個關系,並且:

    • 一對一:在用戶表中添加一列以引用該關系
    • 對於多對多:添加一個user_friendship表,該表將為用戶和友誼表保留一個外鍵。

    這種方法的問題在於,它看起來很麻煩,而且也沒有任何東西可以強制2個用戶完全共享友誼。

我希望有比這些更好的解決方案。 有任何想法嗎?

我將創建一個模型Friendship,其中包含可以進行驗證的朋友用戶的外鍵,以確保僅通過執行以下操作即可與同一用戶建立一個朋友關系:

validates :friend_id, :uniqueness => { :scope => :user_id }

我認為這是一個非常優雅的解決方案,具有很大的靈活性。 檢出HAS_ONE:通過在軌協會指導指南活動記錄關聯 ,如果你要像友誼建模。

當然,還有has_and_belongs_to_many關聯。 但是,它提供的靈活性不如創建模型那樣靈活,因此通常不是一個好主意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM