впервые задаю вопрос о переполнении стека :)
У меня конфликт между friendly_id и активным администратором (это предположение), как обсуждалось во многих темах здесь. Я просмотрел все эти темы, но я не совсем уверен, что они решают мою проблему. Извините за очень длинный пост!
Я пытаюсь создать дружественные ссылки на продукты на моем сайте. Я добавил гем friendly_id, и все работает нормально в моих средах разработки и промежуточной среды, но дружественные ссылки не работают в рабочей среде. Вот весь мой код:
Модель:
class Product < ActiveRecord::Base
extend FriendlyId
friendly_id :name, use: :slugged
...
end
Контроллер:
class ProductsController < ApplicationController
before_filter :get_product, only: [:show]
...
private
def get_product
@product = Product.friendly.find(params[:id])
end
end
На данный момент все мои записи о продуктах имеют заполненное поле slug. Я не хочу использовать слаги в своем административном интерфейсе, поэтому, когда я наткнулся на решение здесь, я пошел дальше и немного изменил его, чтобы активный админ работал вместе с friendly_id.
config/initializers/active_admin.rb:
ActiveAdmin.setup do |config|
...
config.before_filter :revert_friendly_id
end
Я определил revert_friendly_id в контроллере приложения:
class ApplicationController < ActionController::Base
...
protected
def revert_friendly_id
model_name = self.class.name.match(/::(.*)Controller$/)[1].singularize
# Will throw a NameError if the class does not exist
Module.const_get model_name
eval(model_name).class_eval do
def to_param
id.to_s
end
end
rescue NameError
end
end
Я заметил, что при первом развертывании в рабочей среде через capistrano дружественные ссылки работают, как и ожидалось. Таким образом, ссылки на мои продукты доступны с помощью: http://website.com/products/my-product-slug
. Но в ту минуту, когда я получаю доступ к интерфейсу администратора на производстве, ссылки немедленно переключаются обратно на идентификаторы продуктов: http://website.com/products/12345
. Я не совсем уверен, как решить эту проблему, хотя я понимаю, почему это может происходить, может кто-нибудь помочь мне, пожалуйста?