我有一个名为的模型DeviceState
,其中包含“活动”、“离线”、“在线”等状态。
我有另一个模型叫做Device
which belongs_to
to DeviceState
。
为了在设备模型上使用@device.active?
和之类的方法@device.offline?
,我定义了一个动态方法,如下所示:
DeviceState.all.each do |method|
define_method((method.name + "?").to_sym) do
self.device_state.name == method.name
end
end
我的问题是,当我尝试在Device
模型上创建测试时,没有创建动态方法,因为DeviceState
在测试环境启动时尚未在数据库中填充模型。所以当我DeviceState
和工厂女孩一起创建数据时,已经太晚了。
我尝试的一个解决方案是播种DeviceState
in spec_helper
,但是虽然这对第一次测试有效,但由于数据库清理器删除了数据,所以它不适用于所有其他测试。
克服那些动态定义的方法的最佳方法是什么?