我在docs注意到:Previous versions of FriendlyId appended a numeric sequence to make slugs unique, but this was removed to simplify using FriendlyId in concurrent code.
有没有办法恢复到这种格式?我的模型只有name
所以没有任何其他可行的子弹候选者(time
或date
在这种情况下对于slug候选者没有意义。)< / p>
如何更改此(当前格式):
car.friendly_id #=> "peugeot-206"
car2.friendly_id #=> "peugeot-206-f9f3789a-daec-4156-af1d-fab81aa16ee5"
car3.friendly_id #=> "peugeot-206-f9dsafad-eamj-2091-a3de-fabsafafdsa5"
进入这个:
car.friendly_id #=> "peugeot-206"
car2.friendly_id #=> "peugeot-206-1"
car3.friendly_id #=> "peugeot-206-2"
答案 0 :(得分:2)
旧行为是在特殊module中实施的。但目前它还没有被释放。因此,如果要恢复旧行为,可以在Github上的friebdly_id
中切换Gemfile
,并将sequentially_slugged
添加到模块列表中。
答案 1 :(得分:1)
我意识到你说过
(在这种情况下对于候选人来说时间或日期没有意义)
但是假设你只是指时间的字符串格式而不是unix这是一个数字序列,那么我想出了这个解决方法来解决你的问题/关注:
# app/models/car.rb
class Car < ActiveRecord::Base
extend FriendlyId
friendly_id :name, use: :slugged
def normalize_friendly_id(string)
incremented_number = (Time.now.to_f * 1000000).to_i
"#{super}-#{incremented_number}"
end
end
所以现在可行
car1 = Car.create(name: "peugeot")
car2 = Car.create(name: "peugeot")
car3 = Car.create(name: "peugeot")
car1.friendly_id #=> "peugeot-1451368076324115"
car2.friendly_id #=> "peugeot-1451368076457560"
car3.friendly_id #=> "peugeot-1451368076460087"
注意:数字 递增
Time.now.to_f * 1000将是毫秒,而我正在使用 Time.now.to_f * 1000000是MICROSECONDS &lt; - 这是百万分之一秒。它将 NOT 同时创建,因此不会遇到slug冲突。如果那里有人认为它可以再添加一些零到这个乘数。