我正在使用ruby 2,rails 4和mongoid-rails gem
我有两种模式:
class Product
embeds_one :feature
end
class Feature
embedded_in :product
field :color, type: String
end
假设我有一个产品:
p = Product.new
我希望能够打电话:
p.color = "blue"
而不是必须:
p.feature.color = "blue"
调用属性也是如此:
p.color
=> "blue"
VS。不太理想(和现状)
p.feature.color
=> "blue"
我知道有活动记录你可以使用委托,但我如何在mongoid中设置它而不必用大量参考特征模型的方法来填充我的模型?
答案 0 :(得分:6)
delegate
方法不仅限于Active记录 - 它附带Active Support,可以在任何类上使用,以将任何方法委托给任何内部对象:
require 'active_support/all'
class A
def initialize(a)
@a = a
end
delegate :+, to: :@a
end
A.new(2) + 4 #=> 6
因此您也可以将它用于您的模型。只需记住添加allow_nil: true
,这样如果它没有任何功能,它就不会抛出异常。
class Product
embeds_one :feature
delegate :color, to: :feature, allow_nil: true
end