active_storage.resolve_model_to_route方法接受一个ActiveRecord模型类作为参数,并根据模型类是否存在一个与之对应的Active Storage附件关联,返回相应的路由名称。不同的返回值代表不同的附件关联方式。
具体而言,如果模型存在一个命名为“avatar”的附件,则根据不同的参数输入返回的路由名称如下:
下面是一个简单的示例:
class User < ApplicationRecord
has_one_attached :avatar
end
# 场景一:存在名为avatar的附件,使用默认路由
url1 = Rails.application.routes.url_helpers.rails_blob_path(user.avatar, only_path: true)
# 返回的URL类似于:/rails/active_storage/blobs/eyJf...
# 调用resolve_model_to_route方法返回nil,因为使用了默认路由
route1 = ActiveStorage::Routing.resolve_model_to_route(User)
# route1为nil
# 场景二:存在名为avatar的附件,使用路由名称为avatar的路由
url2 = Rails.application.routes.url_helpers.url_for(user.avatar)
# 返回的URL类似于:/rails/active_storage/disk/eyJf...
# 调用resolve_model_to_route方法返回“avatar”
route2 = ActiveStorage::Routing.resolve_model_to_route(User, 'avatar')
# route2为“avatar”