friendly_id и настоящий идентификатор

Есть ли способ получить настоящий столбец id из модели, модифицированной с помощью friendly_id?

Я не хочу делать для него еще один запрос к БД из соображений производительности.


person M2_    schedule 30.10.2011    source источник


Ответы (2)


Вообще говоря, friendly_id изменяет методы to_param и find. Далее должно работать:

@affiche = Affiche.find(params[:id]) # params[:id] is a slug
@id = @affiche.id
person Voldy    schedule 30.10.2011
comment
Это ясно, спасибо. Но я хотел бы избежать другого запроса к БД - person M2_; 30.10.2011
comment
Где здесь еще один запрос к БД? - person Voldy; 30.10.2011
comment
О, я не понял это с первого раза, извините. Это ответ, спасибо! - person M2_; 01.11.2011

Вы пробовали attributes["id"]? например: Model.first.attributes["id"]

person Mattias Wadman    schedule 30.10.2011
comment
Я действительно не понимаю, где его использовать. Но если я сделаю в контроллере @id = Affiche.first.attributes["id"], я ничего не получу - person M2_; 30.10.2011
comment
Вы получаете nil? если запрос к базе данных, вызванный запуском first, включает столбец id, я думаю, вы сможете получить к нему доступ через хэш атрибутов. Но я не знаю, как работает плагин friendly_id, похоже, он использует отдельную таблицу для всех слагов. Так что я думаю, что ответ @voldy должен работать. - person Mattias Wadman; 30.10.2011
comment
но опять же это еще один запрос, нет ли другого пути? Что-то вроде изменения модели, может быть, чтобы добавить реальный id к params. Или как-то пропустить настоящий id через слаг? И слаги находятся в той же таблице, что и ids для frienly_url - person M2_; 30.10.2011
comment
Я имел в виду, что вы должны иметь возможность использовать attributes в экземпляре модели, который у вас уже есть. Как вы ищете экземпляр модели в первую очередь при использовании дружественного идентификатора? - person Mattias Wadman; 30.10.2011