我想知道,实现虚拟模型的最佳选择是什么。
假设我们有用户,我们希望他们拥有性别属性。
最简单的选择是拥有Gender
模型,然后执行belongs_to :gender
然后,每当您要求用户时,它还会在性别表上执行SELECT
因此,有没有人知道如何实现一个不会在数据库中持久化的虚拟模型,而只是一个能够通过belongs_to association
执行{{1}上的选择的常规模型}或Male
?
我知道我可以使用序列化,但我觉得每次创建用户时存储序列化对象都会浪费内存/空间/资源,并且肯定会喜欢我可以使用传统gender_id的解决方案:整数......
感谢您的帮助。
答案 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 }