Устранение неполадок friendly_id с Rails 4: работа в консоли rails, как и ожидалось, получение ошибки RecordNotFound от контроллера

Я успешно использую 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

Я в тупике! Любые подсказки?


person Shane    schedule 01.11.2013    source источник
comment
Просто пингую - есть кто?   -  person Shane    schedule 10.01.2014
comment
Я тоже застрял на этом - вы смогли что-нибудь понять?   -  person vikhyat    schedule 22.01.2014
comment
Кто-нибудь из вас понял это? Получение той же проблемы.   -  person daveomcd    schedule 15.09.2014


Ответы (1)


Вы пытались добавить :finders?

friendly_id :slug_candidates, use: [:slugged, :history, :finders]
person Joel Grannas    schedule 22.01.2014
comment
Это решило проблему, описанную выше для меня! - person daveomcd; 15.09.2014
comment
У меня та же проблема, и, похоже, она работает с включенным :finders, но я думаю, что это даже не нужно. - person Robert Cordes; 25.09.2014
comment
Последняя версия дружественного идентификатора требует, чтобы вы добавляли к любому методу .find префикс .friendly... поэтому Model.friendly.find(), а не просто Model.find(). Метод finders заставит его работать без - person Joel Grannas; 03.10.2014
comment
Но если вы посмотрите на пример во вступительном посте, он действительно использует friendly.find - я думаю, в этом весь смысл вопроса. У меня такая же проблема. Любой? - person Mitja Čebokli; 22.05.2015