0

我正在創建一個RoR應用程序,它需要一個許多到多個之間的關聯表(至少在理論上)的中間。間接循環依賴關係可以嗎?

是怎麼回事?那麼,我需要一個用戶表,其中包含兩種類型的用戶:服務器客戶端,或多或少像老師和學生(私人課程,但與多個教師)的想法,或醫生患者

我最初的想法是簡單地做一個用戶表(你知道,登錄,電子郵件和個人信息),併爲其分配一個角色(服務器或客戶端),但後來我認爲與第三個表進行這種關聯會很麻煩

USER < -----> USER_USER

但是創建兩個表示每個角色的「登錄」表以及第三個關聯表聽起來不對。

Client_Login < -----通---> Client_Server < ---直通--->服務器

爲了簡單起見,客戶端不能是服務器到另一個客戶端和服務器不能另一臺服務器的客戶端。 很明顯,一臺服務器可以有多個客戶端,而一個客戶端有多個服務器

如何建議建模這種關係?

回答

1

如果您需要在服務器和客戶端之間明確地使用不同的方法,我假設您需要不同的類。那麼你可能想看看單表繼承(STI)。這將允許您使用一個用戶表,但有兩個不同的模型使用它。

class User < ActiveRecord::Base 
    belongs_to :another_model #example association that will exist for all user types 
    self.inheritance_column = :role 
    # if you need to be able to tell what role are available 
    def self.roles 
     %w(Client Server) 
    end 

end 

class Client < User 
    has_many :server_clients 
    has_many :servers, through: :server_clients 
end 
class Server < User 
    has_many :server_clients 
    has_many :clients, through: :server_clients 
end 

然後,您必須爲橋接設置一個簡單的server_client.rb模型。從這裏

例如:http://samurails.com/tutorial/single-table-inheritance-with-rails-4-part-1/

這將允許你把通用功能的所有用戶的用戶類,並在服務器和客戶端的相應類別的特定功能。

1

它一直都在做。有多對多回到自己是很常見的。在處理彼此之間的人際關係的層次結構中,(依賴,經理,子女等等)很常見......)

class User 
    has_many :user_relations, dependent: destroy, inverse_of: :user 
    has_many :dependent_users, through: :user_relations 

    has_many :dependent_upon_users, through: user_relations, source: 
:dependent_upon 
end 

class UserRelation < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :dependent_upon, class_name: User 

    validates_presence_of :user, :dependent_upon 
end