好的,我正在努力制作一个允许我有效扩展它的friendly_id。这是我到目前为止所得到的。如果您有一个匹配的名称,它的作用基本上是在计数上加+1。因此,如果您是第二个注册为John doe的人,您的网址将是/ john-doe-1。
extend FriendlyId
friendly_id :name_and_maybe_count, use: [:slugged, :history]
def name_and_maybe_count
number = User.where(name: name).count
return name if number == 0
return "#{name}-#{number}"
end
然而,这段代码仍然给我带来了一些问题。
我知道这对你们大多数人来说都是次要的挑剔,但这是我需要解决的问题!
答案 0 :(得分:0)
您想要覆盖to_param,将id包含为友好ID的第一位
我在我的一个应用程序中扩展了这样的活动记录,
module ActiveRecord
class Base
def self.uses_slug(attrib = :name)
define_method(:to_param) do
"#{self.id}-#{self.send(attrib).parameterize}"
end
end
end
所以我可以做到
uses_slug :name
在任何模型中 但是在任何模型中都应该有效:
def to_param
"#{self.id}-#{self.my_attrib.parameterize}"
end
这样做的好处在于你在控制器中执行
Model.find(params[:id])
你不必改变任何东西,因为当rails试图转换像" 11-my-cool-friendly-id" 这样的字符串时,它只会采取第一个数字位并保留其余部分。