Rails - 将数据库/模型与非数据库表的模块相关联

时间:2014-01-07 21:10:43

标签: ruby-on-rails database associations

我想创建“关联”(或者通过具有关联的类似方法的等效概念)。在这个信息表中,不需要与其他涉及CRUD的表一起更新。

这是我未更新的信息表:

    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)我应该将未更新的信息表放入哪种格式/数据类型?类,模块,多个类实例,二维数组或二维哈希?

  • 我解决这个决定的目的是能够使用关联数据库模型时附带的类似方法符号。 (例如,两个名为“Personality”和“User”的表将允许Rails / Ruby代码,如@user.alternate_name.@personality.user.email)。

3)rails使用hidden:id和timestamp列的事实是否会以任何方式影响这一点? (如果这个问题有点宽泛,请随意忽略回答)。 非常感谢!

- 用户只能拥有一种人格类型。 - 其他数据库模型需要参考与用户模型无关的个性类型信息。

1 个答案:

答案 0 :(得分:0)

据推测,只有User模型可以具有个性类型。为什么不在User模型中创建这些类型的数组作为常量,然后您可以在表单等中引用它以便使用User::PERSONALITY_TYPES进行选择。

例如:

class User

  PERSONALITY_TYPES = %w{ ENTJ INTJ ISFP ESFP }

  # ... other model code
end

然后只需将数组中的个性类型索引存储为用户的personality_type_index。

也许我过分简化了你的需求,但这是我开始采用的方法。