使用 Record.friendly.find 参数防止 ID

问题描述

我正在使用 FriendlyId 和 Rails。

我想支持通过 slug 查找: https://example.com/restaurants/plaza-diner

不支持通过其 ID 查找: https://example.com/restaurants/23

我正在使用 Restaurant.friendly.find(params[:id])认情况下它支持两者。如何使它不支持通过 ID 检索?

使用 find_by(slug: params[:id]) 不是一种选择,因为它跳过了 FriendlyId 的内部结构并且不支持例如历史段塞。

我可以检查 params[:id] 是否为整数并引发 ActiveRecord:RecordNotFound,但这似乎很复杂。有没有更简单的方法

相关文件https://github.com/norman/friendly_id/blob/819c0b111b0f722809c0a13ad025c5191a278f85/lib/friendly_id/finders.rb

解决方法

使用Restaurant.friendly.find_by_friendly_id(params[:id])

仅通过友好 ID 查找,完全绕过原始 find

见: