Я успешно использую friendly_id с несколькими моделями в своем приложении Rails 4. Раньше у меня было две модели, которые я решил объединить (терминалы и локации). Действие Terminals show ранее работало с friendly_id, где я мог посетить /terminals/albany и получить Терминал с слагом «albany».
Я прошел большую часть рефакторинга, чтобы сжать его до локаций, и нахожусь на последней части (исправление представлений). Попутно я тестировал вещи в Rails Console и с помощью rspec, и все работает, как и ожидалось. Есть и другие модели, которые все еще работают так, как ожидалось.
Теперь, когда я работаю над новой страницей показа для Locations, я получаю следующую ошибку при попытке посетить /locations/albany:
ActiveRecord::RecordNotFound in LocationsController#show
Couldn't find Location with id=albany
Однако, когда я посещаю /locations/5, он успешно загружает запись. Он также работает в консоли Rails:
Location.find(5) # returns the correct location object
Location.find(5).slug # returns 'albany'
Location.friendly.find('albany') # returns the correct location object
Когда я смотрю на сгенерированные слаги в Rails dbconsole, все они выглядят так, как будто они были сгенерированы правильно и дубликатов нет.
Вот моя модель:
Class Location < ActiveRecord::Base
extend FriendlyId
friendly_id :slug_candidates, use: [:slugged, :history]
def slug_candidates
[
:name,
[:name, :zip],
[:name, :zip, :location_type],
]
end
end
И вот мое действие show в моем контроллере:
def show
@locations = Location.friendly.find(params[:id])
end
Я в тупике! Любые подсказки?