Rails 没有序列化的虚拟模型

Rails virtual model without serialization

我想知道,实施虚拟模型的最佳选择是什么。

假设我们有用户,我们希望他们有性别属性。

最简单的选择是拥有一个 Gender 模型,然后做一个 belongs_to :gender

然后,每次请求用户时,它还会对性别 table

执行 SELECT

因此,有没有人知道如何实现一个虚拟模型,该模型不会持久保存在数据库中,只是一个能够通过 belongs_to association 执行 select 在 Malefemale 上?

我知道我可以只使用序列化,但我觉得每次创建用户时存储序列化对象有点浪费 memory/space/ressources,我肯定会喜欢一个可以使用的解决方案传统 gender_id:integer ...

谢谢大家的帮助。

我建议你使用 enum field (Rails 4.1+),它允许它的 值在一组预定义的值 内(你可以 enumerate 他们,因此得名)。它在数据库中作为普通整数持久化,但是生成了方便的方法来轻松操作它们:

class User < ActiveRecord::Base
  enum gender: [ :male, :female ]
end

user.male!
user.female? # => false
user.gender  # => "male"

User.male # => a collection of users with "male" specified in gender

Conversation.genders # => { "male" => 0, "female" => 1 }