【发布时间】:2017-01-29 12:09:14
【问题描述】:
是否可以将 mongoid field 配置为反序列化为 Struct 而不是 Hash ? (with defaults)
我的用例:一家公司的订阅计划以哈希形式存储在我的模型中。
以前作为哈希
class Company
include Mongoid::Document
field :subscription, type: Hash, default: {
ends_at: 0,
quantity: 0,
started_at: 0,
cancelled: false,
}
我希望我不必写Company.first.subscription[:ends_at],我宁愿写Company.subscription.ends_at
我认为下面的方法会更好
class Company
include Mongoid::Document
field :subscription_plan, type: Struct, default: Struct.new(
:ends_at, :quantity, :started_at, :cancelled
) do
def initialize(
ends_at: nil,
quantity: 0,
starts_at: nil,
cancelled: false
); super end
end
end
如果计划可以在一个类中定义就更好了
class SubscriptionPlan < Struct.new(
ends_at, :quantity, :starts_at, :cancelled
) do
def initialize(
ends_at: nil,
quantity: 0,
starts_at: nil,
cancelled: false
); super; end
end
class Company
field :subscription_plan, type: SubscriptionPlan, default: SubscriptionPlan.new
end
我怎样才能让它工作?
【问题讨论】:
-
你试过我的答案了吗?
标签: ruby serialization deserialization ruby-on-rails-5 mongoid6