没有序列化的Rails虚拟模型

时间:2015-01-16 16:17:52

标签: ruby-on-rails-4

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

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

最简单的选择是拥有Gender模型,然后执行belongs_to :gender

然后,每当您要求用户时,它还会在性别表上执行SELECT

因此,有没有人知道如何实现一个不会在数据库中持久化的虚拟模型,而只是一个能够通过belongs_to association执行{{1}上的选择的常规模型}或Male

我知道我可以使用序列化,但我觉得每次创建用户时存储序列化对象都会浪费内存/空间/资源,并且肯定会喜欢我可以使用传统gender_id的解决方案:整数......

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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

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 }