0

我試圖找出完成關係並遇到麻煩的最佳方法。我遇到了幾篇文章,這些文章有點解決了我期望做的事情,但並不完全。與同一個表(多對多)Ruby on Rails的多個關聯

我有一個用戶模型和一個門票模型。兩者都通過UserTickets模型連接,因此我可以將多個用戶分配給一張票。我想要做的是將分配給工單的用戶分成請求者和代理。如果用戶是請求者或代理,則用戶模型沒有任何列來聲明,而我有is_admin,is_customer等。我認爲我需要的是沿着Ruby On Rails - many to many between the same table的路線,但並不完全。

理想情況下,我希望我的Tickets表使用agent_id(user_id來自User類)和requester_id(user_id來自User類),而不是普通user_id(來自User類的user_id,它將所有用戶組合成一個組) 。我會假設仍然允許我調用@ current_user.tickets來獲取分配給該用戶的所有票據。

這裏是我的用戶模型:

has_many :user_tickets 
    has_many :support_tickets, through: :user_tickets 

這裏是我的門票模式:

has_many :user_tickets 
    has_many :users, through: :user_tickets 

這裏是我的UserTickets加盟模式:

belongs_to :user 
    belongs_to :support_ticket 

我們非常感謝您的幫助!

這不是重複的。

+0

的可能的複製[可選許多在導軌一對多關係?](http://stackoverflow.com/questions/40888515 /可選 - 許多對多關係在鋼軌) – sa77

回答

0

@Skylar,

1)如果您的目標是將多個用戶分配到票證?因爲這不需要多對多的關係。您只需要在用戶模型上使用一對多關係和布爾型屬性agent?。如果你更喜歡這個,你甚至可以創建使用用戶模型的代理模型。

2)但是,如果你想創建一個多對多的關係檢查this。 Rails文檔比我寫的要好。參見2.6節has_and_belongs_to_many關聯。

解1)

模型

class User < ApplicationRecord 
    has_many :tickets, class_name: :Ticket, foreign_key: :agent_id 

    def agent? 
    self.agent 
    end 
end 

class Agent < User 
    default_scope { where(agent: true) } 
end 

class Ticket < ApplicationRecord 
    belongs_to :user 
    belongs_to :agent, class_name: :User 
end 

遷移

class CreateTickets < ActiveRecord::Migration[5.0] 
    def change 
    create_table :tickets do |t| 
     t.references :user, index: true 
     t.references :agent, index: true 
     t.string :event_name 
     t.timestamps 
    end 
    end 
end 
+0

丹,在你發送的鏈接中查看2.6,並使用該圖作爲例子..我想要在組件上的兩組部分。 ..例如金屬零件或木製零件都從零件模型中的part_id拉出。關於零件是木製還是金屬的聲明將由進入組件的用戶決定,因爲零件表中沒有可識別的列描述它是什麼類型。 –

+0

它回答你的問題嗎? – Dan

+0

不是真的我害怕。我不知道如何設置模型來說明我想要做的事情。 –