Понимание метода кандидатов slug в модели Rails


Я пытаюсь создать красивые URL-адреса в своем приложении Rails. Я не мог понять, что происходит внутри метода #slug_candidates в модели.

class News < ApplicationRecord
  friendly_id :slug_candidates, use: [:slugged, :finders, :history]
  def slug_candidates 
    [:title,
      [:title, :id]
    ] 
  end
end

Также нашел аналогичный метод в ответе :

def slug_candidates
  [
    :name,
    [:name, 2],
    [:name, 3],
    [:name, 4],
    [:name, 5],
    [:name, 6],
    [:name, 7]
  ]
end
Может ли кто-нибудь дать краткое объяснение того, что делает этот метод?
1 2

1 ответ:

Если у нас есть 2 news с одинаковым названием, то slugs будет одинаковым. Поэтому мы не можем их идентифицировать. Например:

New.all
# => [#<New id: 1, tile: "Title">, #<New id: 2, tile: "Title">]

# Without `slug_candidates`
New.first # => URL: "news/title"
New.second # => URL: "news/title"
# => We cannot find the second one.

Теперь slug_candidates предоставляет список вариантов, и FriendlyId будет идти по этому списку, пока не найдет пули, которые еще не взяты.

# With `slug_candidates`
def slug_candidates 
  [:title, [:title, :id]]
end

New.first # => URL: "news/title"
New.second # => URL: "news/title-2"