On Rails 4.2, я хотел бы использовать Friendly Id для маршрутизации к определенной модели, но не хочу создавать столбцы slug в таблице модели. Вместо этого я предпочел бы использовать метод доступа на модели и динамически генерировать пул. Это возможно? Я не мог найти это в documentation.Могу ли я использовать идентификатор Friendly Id в Rails без создания столбца slug в таблице модели?
Могу ли я использовать идентификатор Friendly Id в Rails без создания столбца slug в таблице модели?
ответ
Вы не можете сделать это напрямую, используя дружественный идентификатор из-за того, как он использует slug для запроса базы данных (relevant source).
Однако не сложно выполнить то, что вы хотите. Что вам нужно будет два метода:
Model#slug
метод, который даст вам тихоход для конкретной моделиModel.find_by_slug
метод, который будет генерировать соответствующий запрос для конкретного слизня.
Теперь в ваших контроллерах вы можете использовать Model.find_by_slug
, чтобы получить соответствующую модель из параметров пути. Однако осуществление этого метода может быть сложно, особенно если ваш Model#slug
использует необратимый реализацию пробок, как Slugify, потому что он просто получить освобождается от непризнанных символов в тексте и нормализует несколько вещей, чтобы тот же характер (например, _ и -. В -)
Вы можете использовать URI::Escape.encode
и URI::Escape.decode
, но в итоге вы получите несколько уродливых слизней.
Как обсуждалось here Я пошел со следующим подходом для пользовательской маршрутизации на основе динамического slug.
Я хочу собственный маршрут, как это: /foos/the-title-parameterized-1
(где «1
» является id
из Foo
объекта).
Foo
модель:
#...
attr_accessor :slug
#dynamically generate a slug, the Rails `parameterize`
#handles transforming of ugly url characters such as
#unicode or spaces:
def slug
"#{self.title.parameterize[0..200]}-#{self.id}"
end
def to_param
slug
end
#...
routes.rb
:
get 'foos/:slug' => 'foos#show', :as => 'foo'
foos_controller.rb
:
def show
@foo = Foo.find params[:slug].split("-").last.to_i
end
В моей show
зрения, я могу использовать метод foo_path
вспомогательный URL-адрес по умолчанию.
- 1. Rails globalize + friendly id
- 2. Rails + Friendly ID: Есть некоторые пути использовать числовой идентификатор
- 3. Friendly ID - undefined method `slug = 'for
- 4. friendly-id: Undefined method slug для фильма
- 5. Rails Friendly id Fullstops
- 6. Ruby on Rails - Friendly-ID - Id обрабатывается как slug on destroy метод
- 7. Переписывание столбца id в таблице Rails
- 8. Обозначение столбца идентификатора родительской модели в Rails?
- 9. Могу ли я иметь 2 уникальных столбца в одной таблице?
- 10. Связанный с Rails идентификатор модели для создания
- 11. Могу ли я использовать функцию excel в сводной таблице
- 12. Дружественные Id Пользовательские Slug
- 13. Могу ли я использовать несекретный идентификатор для модели loopback?
- 14. ID + Slug имя в URL в Rails (как в StackOverflow)
- 15. Идентификатор столбца в таблице объявления
- 16. Могу ли я дать каждой строке идентификатор в таблице displaytag?
- 17. Как я могу использовать строку в таблице?
- 18. Невозможно использовать NAME в форме, могу ли я использовать идентификатор?
- 19. Как я могу ссылаться на данные в таблице HABTM без модели в Rails 3?
- 20. Rails присваивает идентификатор в модели
- 21. Могу ли я использовать Rails для создания приложения phongap?
- 22. Rails - Могу ли я использовать наблюдателя для отмены сохранения модели
- 23. Простой способ создания столбца имени slug из столбца имени?
- 24. Rails 4 Дружественные Id Slug Не Обновление
- 25. Rails - Как я могу использовать оператор if в модели?
- 26. Могу ли я использовать FLP без модели по умолчанию?
- 27. Включить идентификатор категории Woocommerce в функцию slug
- 28. Могу ли я использовать объект функции без создания экземпляра?
- 29. Могу ли я использовать SAP UI5 mockserver без модели, OData
- 30. Могу ли я использовать @ Html.TextBoxДля другого класса (без модели)?
Не совсем - если вам нужно динамически вычислять «slug» в Ruby, это означает, что вы не можете запрашивать записи на основе пули. Вам нужно было бы вытащить все и разобраться в рубине. То, что вы хотите, скорее всего, является обычным методом для создания пули. – max
Спасибо @max, я подозревал, что именно поэтому я задал еще один вопрос, связанный с созданием настраиваемого метода для создания пули: http://stackoverflow.com/questions/41658221/rails-routing-using-custom-attribute-rather- чем-таблицы-колонки – joshweir