我在一堆不同的模型中使用FriendlyId
。对于具有用户名的特定用例,我不能使用FriendlyId
但仍希望确保用户名不会在任何这些模型中用作slug。
目前,我使用FriendlyId对每个模型进行.exists
查询。它感觉效率不高,所以我想知道是否有更有效的方法来查询库创建的slugs
表中的friendly_id_slugs
列?
我使用的是Rails 5.1,Postgres 9.5.x和FriendlyId 5.2.3
答案 0 :(得分:2)
@Ben的答案帮助我找到了理想的解决方案。事实证明,FriendlyId有一个内部模型 - FriendlyId::Slug
,由friendly_id_slugs
表支持。
所以,像下面这样的查询对我有用:
FriendlyId::Slug.where(
sluggable_type: ["Animals", "Plants"]
)
.where('lower(slug) = ?', potential_username.downcase)
.exists?
答案 1 :(得分:1)
定义模型将其映射到表中,只需创建一个app/models/friendly_id_slug.rb
文件,其中包含:
class FriendlyIdSlug < ApplicationRecord
end
然后,您将获得标准模型活动记录查询方法(FriendlyIdSlug.where…
)
警告,运行原始sql将适用:
ActiveRecord::Base.connection.execute("select * from friendly_id_slugs etc…")
也就是说,您的.exists?
听起来也很公平。如果您为每个模型重复代码,则可以制作一个app/models/concerns
或app/lib
类文件,并在相关模型中重复使用