Rails 8 资产管道:如何通过Propshaft判断资产是否存在?
在Rails 8的Propshaft中检查资产是否存在的方法
在Sprockets时代常用的Rails.application.assets.find_asset(path).present?写法,在Propshaft里已经行不通了——Propshaft的资产管理逻辑和Sprockets完全不同,没有直接对应find_asset的顶层方法。
要在Propshaft中检查资产是否存在,你需要通过它的**resolver(解析器)**来做判断:
# 检查指定路径的资产是否存在 Rails.application.assets.resolver.find_asset(path).present?
或者更简洁的写法(利用Ruby的双重否定转布尔值):
!!Rails.application.assets.resolver.find_asset(path)
补充说明:
Propshaft的资产查找逻辑都封装在Resolver模块里,resolver.find_asset会遍历你在Rails配置中定义的所有资产路径(比如app/assets、vendor/assets等),如果找到匹配的资产文件,就返回一个Propshaft::Asset实例;如果找不到,就返回nil。所以通过判断返回值是否为非空,就能确定资产是否存在。
内容的提问来源于stack exchange,提问作者Timothy Alexis Vass
相关产品推荐
相关产品推荐

