Mic*_*ich 5 ruby activerecord ruby-on-rails factory-bot
我有命名空间的模型,例如:
class Vehicle < ActiveRecord::Base; end
class Vehicle::Car < Vehicle; end
class Vehicle::Train < Vehicle; end
class Vehicle::Jet < Vehicle; end
Run Code Online (Sandbox Code Playgroud)
在为这些模型创建工厂时,它们的设置方式如下:
factory :vehicle_car, class: Vehicle::Car do; end
factory :vehicle_train, class: Vehicle::Train do; end
factory :vehicle_jet, class: Vehicle::Jet do; end
Run Code Online (Sandbox Code Playgroud)
这会产生以下弃用警告:
弃用警告:不推荐按类查找工厂,并将在 5.0 中删除。改用符号并设置 FactoryBot.allow_class_lookup = false。
是否有编写符号来命名这些工厂的格式,以便我不需要使用类名来遵守弃用警告?
该文档对于该:class选项的行为方式或它的期望值并不是非常有用,但来源更有帮助。从我们发现的错误消息中回溯FactoryBot::Decorator::ClassKeyHash#symbolize_keys:
def symbolized_key(key)
if key.respond_to?(:to_sym)
key.to_sym
elsif FactoryBot.allow_class_lookup
ActiveSupport::Deprecation.warn "Looking up factories by class is deprecated and will be removed in 5.0. Use symbols instead and set FactoryBot.allow_class_lookup = false", caller
key.to_s.underscore.to_sym
end
end
Run Code Online (Sandbox Code Playgroud)
第key.to_sym一个分支中的 是“我想要一个Symbol或String”的惯用语。在key.to_s.underscore.to_sym第二分支告诉我们什么格式的预期。
如果你Vehicle::Car通过to_s.underscore,你会得到'vehicle/car'这些应该可以工作:
factory :vehicle_car, class: 'vehicle/car' do; end
factory :vehicle_train, class: 'vehicle/train' do; end
factory :vehicle_jet, class: 'vehicle/jet' do; end
Run Code Online (Sandbox Code Playgroud)
或者如果你真的想要Symbols(或者有标点符号):
factory :vehicle_car, class: :'vehicle/car' do; end
factory :vehicle_train, class: :'vehicle/train' do; end
factory :vehicle_jet, class: :'vehicle/jet' do; end
Run Code Online (Sandbox Code Playgroud)
小智 5
您还可以:
factory Vehicle::Car.to_s.underscore.to_sym, class: Vehicle::Car do; end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2047 次 |
| 最近记录: |