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

Prevent IDs with Record.friendly.find param

我正在使用 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 的内部结构并且不支持历史 slug。

我可以检查 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]).

Finds exclusively by the friendly id, completely bypassing original find.

参见: