使用enumerize字段的模型:
class ModelB < ActiveRecord::Base
extend Enumerize
attr_accessible :field_in_delegate
enumerize :field_in_delegate,
in: {option_one: 1, option_two: 2, option_three: 3},
default: :option_one, predicates: true, scope: true
end
我可以在字段为枚举时委托field_in_delegate
class ModelA < ActiveRecord::Base
extend Enumerize
attr_accessible :field_in_delegate
delegate :field_in_delegate, to: :model_b
has_one :model_b
end
然后我可以打电话
modelA.field_in_delegate
没有问题,但我不能打电话
modelA.option_one?
如何通过委托
干燥模式访问enumerize gem提供的帮助方法答案 0 :(得分:2)
有两种方法可以做到这一点:
覆盖method_missing
上的ModelA
以将任何缺少的方法调用转发给代理
class ModelA < ActiveRecord::Base
extend Enumerize
...
delegate :field_in_delegate, to: :model_b
def method_missing(method, *args, &block)
if field_in_delegate.respond_to?(method)
field_in_delegate.send(method, *args, &block)
else
super
end
end
end
将个别方法委派给field_in_delegate
:
class ModelA < ActiveRecord::Base
extend Enumerize
...
delegate :field_in_delegate, :option_one?, :option_two?, to: :model_b
end
使用这种方法,您可以定义每个要求委派的内容。