2014-01-07 76 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