2015-10-19 67 views
0

我試圖確定用於組成兩個單獨表格 - 普通/標準表格和「擴展表格」的單一模型的最佳解決方案。如何撰寫表格和「擴展表格」的模型?

下面是一個人爲的例子,以(希望)幫助更好地示出:

表:

  • usersidfirst_namelast_name
  • users_extenduser_idextra_field_1extra_field_2etc

型號:

idfirst_namelast_nameextra_field_1extra_field_2etc

我無法改變現有的數據庫結構,所以無論解決方案我使用必須能夠處理這種類型的設置。

_extend表的原因是,應用程序的下游使用者可以向擴展表添加其他字段,而不會有任何未來更新對users表損壞的風險。

我以前曾指出composed_of的方向是對此的潛在解決方案,但我看不出它將如何解決兩個連接表的問題。我也看到它仍然有可能遭到棄用/拆除,所以我認爲這條路可能被排除。

單表繼承是一種可能的解決方案嗎?這看起來似乎有些幫助,但我並沒有完全理解我怎樣才能適應我要解決的問題。

任何幫助/示例都將不勝感激。

謝謝!

回答

1

由於@ TK-421指出您需要與UserExtend建立has_one關聯。然後,您可以使用委派來獲取所需的屬性。例如:

class User < ActiveRecord::Base 
    USER_EXTEND_ATTRS = %i(extra_field_1 extra_field_2).freeze 

    has_one :user_extend 
    delegate *USER_EXTEND_ATTRS, to: :user_extend 
end 
2

User可以簡單has_oneUserExtend(或者更一致的名稱,如UserExtension),它可以belongs_toUser

你可能會更喜歡這個,但這似乎合乎邏輯,因爲users_extend已經有了傳統的user_id外鍵。

您的具體實施可能會改變這一點,但根據說明似乎可行。