2014-01-07 70 views
0

我想創建「關聯」(或具有類似方法的同等概念,可以從關聯中獲得)。正是通過這張信息表,無需與涉及CRUD的其他表進行更新。Rails - 將數據庫/模型與非數據庫表的模塊關聯

這是我的未更新的信息表:

Table name: Personalities 

    personality_type | alternate_name | CF1 | CF2 | CF3 | CF4 | CF5 | CF6 | CF7 | CF8 
    ---------------------------------------------------------------------------------- 
    ENTj    | ENTJ   | Te | Ni | Se | Fi | etc | etc |  | 
    INTp    | INTJ   | (more data values) 
    ISFj    | ISFP   | (more data values) 
    ESFp    | ESFP   | (more data values) 

所以,在我看來,讓這個未更新到數據庫表中,並在其上進行查詢,將設計的愚蠢和毫無意義的方式我的代碼,因爲這會導致所有的查詢加載時間開銷。

所以我在想像做一個單獨的Ruby模塊,但不知道如何「關聯」它與其他表模型將成爲完整的數據庫表。

1)如何將一個基於ActiveRecords :: Base的非數據庫類實例與一個?

2)我應該將哪些格式/數據類型放入未更新的信息表中?類,模塊,多個類實例,2維數組或2維散列?

  • 我在整理這個決定時的目標是能夠使用與數據庫模型關聯的類似方法符號。 (例如名爲「Personality」和「User」的兩個表格將允許Rails/Ruby代碼,如@user.alternate_name.@personality.user.email)。

3)軌道使用hidden:id和timestamp列是否會以任何方式影響它? (如果這個問題有點寬泛,請隨時忽略回答)。 非常感謝!

- 用戶只能擁有一種性格類型。其他數據庫模型需要引用獨立於用戶模型的個性類型信息。

回答

0

據推測,只有User模型可以具有個性類型。爲什麼不在User模型中將這些類型的數組作爲常量創建,然後可以使用User::PERSONALITY_TYPES在表單等中使用User::PERSONALITY_TYPES進行選擇。

例如:

class User 

    PERSONALITY_TYPES = %w{ ENTJ INTJ ISFP ESFP } 

    # ... other model code 
end 

然後簡單的個性類型的索引存儲陣列作爲用戶的personality_type_index內。

也許我只是簡單化了你的需求,但這是我開始的方法。

+0

啊,應該提到其他信息,但我沒有意識到它會變得重要;我想盡可能簡化我的問題。 我也有其他的關聯。 用戶可以設置自己的個性類型,但也有字符。用戶將通過加入模式對他們認爲角色的個性進行「投票」,例如「聲明」。重要的是,我將通過對每個角色的總人數進行實質性的投票來創建投票。 – ahnbizcad

+0

因此,我的想法是,我應該有某種包含這些人格類型的獨立實體,而不是將個性概念完全包含在用戶模型中,因爲其他模型需要引用與用戶無關的個性類型模型。 當然,我想通過不必在另一個模型中再次定義這些方法來保持乾燥。 – ahnbizcad

+0

那麼,您仍然可以避免通過爲每個個性類型的計數器添加一個'Personality'模型到'Character'模型並允許用戶增加它們。然而,你已經開始描述一個足夠複雜的配置,可能需要自己的模型... – Jon