2

我將用一個示例來解釋我想實現的行爲。Rails:如何進行動態關聯

如果你有一個項目管理應用程序,並且你添加了一個任務,但並非所有的貢獻者都是該應用程序的用戶。 因此,當您向任務添加貢獻者時,您可以輸入用戶名或電子郵件地址。

這裏是我發現有點棘手的部分。 task模型有許多貢獻者通過user模型鏈接,但從這一點上我想實現2件事情。

  1. 商店的非成員的電子郵件(這顯然是相當簡單)

  2. 如果該電子郵件地址是創建一個帳戶,然後將用戶鏈接到任務和刪除臨時保存電子郵件。

這樣,當該用戶創建一個帳戶時,所有相關的任務將已經與他們的電子郵件相關聯。

這是我可以通過多態關聯實現的東西嗎?或者有什麼我應該看的?

回答

1

涉及多態關聯的部分很多tasks有很多contributors

有許多方法可以實現您所需的其他功能。

我可能會通過創建一個新的contributor記錄來存儲臨時電子郵件地址,而不會出現其他字段,例如password。當用戶真正註冊時,我會使用first_or_create方法來完成用戶帳戶的設置。

這消除了存儲臨時電子郵件和轉移任務所有權的需要。在註冊之前,用於鏈接contributortaskid與註冊之後使用的是相同的。

+0

我正在使用設計,我很確定在註冊時驗證電子郵件地址的唯一性,因此用戶將成爲許多項目和該項目任務中的許多任務的貢獻者。我可以有一個專欄,當沒有用戶與電子郵件註冊時存儲電子郵件我搜索貢獻者表並將它們鏈接起來?基本上創建一個contributor_id可以被鏈接到一個user_id以後? –

+0

對不起,我只是回到你身邊。要回答「當沒有用戶與電子郵件相關時,我可以有一個存儲電子郵件的列,那麼當我搜索撰稿人表並將其鏈接起來?」是的,Devise可能需要配置爲僅通過電子郵件創建這些'contributor'記錄,但這與您如何使用諸如'before_create'之類的方法驗證記錄有關。我建議你要麼有'contributor_id'或'user_id',而不是兩者。貢獻者表可以包含完整記錄(已註冊人員)和不完整記錄(僅包含電子郵件) – Dru

+0

當人員實際註冊時,使用'first_or_create'。如果電子郵件地址已存在,這將使用密碼和其他信息更新不完整的記錄。更多關於first_or_create的信息http://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method-i-first_or_create] – Dru