2014-09-25 2 views
0

Я получаю сообщение об ошибке из rails после установки Friendly_ID, потому что код неверно интерпретирует ввод, и я не знаю, как исправить проблему. Для того, чтобы рамки MVC, чтобы понять URL и маршрут соответственно, гиперссылка должна соответствовать следующей схеме:Почему жемчужина Friendly_ID использует slug вместо первичного ключа?

localhost:3000/posts/[:id] 

Выше, [id] представляет первичный ключ для любого объекта, найденного в классе модели Post. Неправильное толкование вступает в силу, когда Friendly_ID изменяет URL, чтобы соответствовать следующей схеме:

localhost:3000/posts/[:slug] 

Обновленный URL, очевидно, легче читать пользователем, но так как мое приложение ожидает получить [:id], то возникает следующее исключение для URL «локальный: 3000/сообщений/тестирования»:

Rails exception screenshot


Я предположил, что Friendly_ID камень будет либо заботиться о проблеме маршрутизации внутри, выполнить некоторые родню d от [:id] искать или работать с магией через маскировку. Поскольку в этом случае ни одно из приведенных выше не является истинным, как мне решить проблему, позволяя симпатичным URL-адресам доставлять тот же результат, что и исходный шаблон url?

ответ

1

Finder наиважнейшая отключена, так как гем версии 5.0

Использование Post.friendly.find(params[:id]) или понижения рейтинга, или использовать Finders аддон см project github page

+0

это отлично работает! Но есть ли интуитивный способ заставить рельсы принять шаблон url? – elersong

+0

@elersong вы можете это сделать - friendly_id: foo, use: [: slugged,: finders] см. В проекте github page – urmurmur

+0

На странице github не указано, куда должен идти этот код. Где я должен это сказать? – elersong

0

Добавить config.use :finders в свой config/initializers/friendly_id.rb

Вот что мое выглядит следующим образом:

FriendlyId.defaults do |config| 
    config.use :reserved 

    config.reserved_words = %w(new edit index session login logout users admin 
    stylesheets assets javascripts images) 

    config.use :finders 
end 
+0

Я только что проверил свой каталог инициализаторов, и у меня его нет. Должно быть? – elersong

+0

Он устанавливает конфигурацию по умолчанию. Если вы используете дружественный идентификатор только для одного класса, вам это не нужно. Но если вы используете его для нескольких классов, лучше сохранить конфигурацию в одном месте. – makhan

Смежные вопросы