Rails 没有序列化的虚拟模型
Rails virtual model without serialization
我想知道,实施虚拟模型的最佳选择是什么。
假设我们有用户,我们希望他们有性别属性。
最简单的选择是拥有一个 Gender
模型,然后做一个 belongs_to :gender
然后,每次请求用户时,它还会对性别 table
执行 SELECT
因此,有没有人知道如何实现一个虚拟模型,该模型不会持久保存在数据库中,只是一个能够通过 belongs_to association
执行 select 在 Male
或 female
上?
我知道我可以只使用序列化,但我觉得每次创建用户时存储序列化对象有点浪费 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 }
我想知道,实施虚拟模型的最佳选择是什么。
假设我们有用户,我们希望他们有性别属性。
最简单的选择是拥有一个 Gender
模型,然后做一个 belongs_to :gender
然后,每次请求用户时,它还会对性别 table
执行SELECT
因此,有没有人知道如何实现一个虚拟模型,该模型不会持久保存在数据库中,只是一个能够通过 belongs_to association
执行 select 在 Male
或 female
上?
我知道我可以只使用序列化,但我觉得每次创建用户时存储序列化对象有点浪费 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 }