Фильтрация категорий для доски обсуждений Rails 3, с альтернативным URL - PullRequest
0 голосов
/ 24 февраля 2012

Я создаю доску обсуждений в Rails 3, но у меня возникают трудности с форматированием URL.

Мне бы хотелось, чтобы слаг категории появился после / Discussions / такесли бы у меня была категория «пиво» ​​и обсуждение под названием «бруклинский лагер», мои URL отображались бы как:

/discussions/beer

и

/discussions/beer/brooklyn-lager

Мои модели определены как:

class Discussion
  belongs_to :category

class Category
  has_many :discussions

У меня это работает в данный момент, но только путем захвата: index и: show маршруты ресурса обсуждений и использования этого:

resources :discussions, :except => [:show]
get "/discussions/:category" => "discussions#index", :as => :discussions_via_category
get "/discussions/:category/:id" => "discussions#show", :as => :discussion_via_category

и в index и showдействия контроллера обсуждений с использованием параметра категории для фильтрации результатов.

Это также требует от меня определения функции to_url в модели обсуждения, которая возвращает путь, включающий слаг категории.

Это действительно правильный способ сделать это?Это немного портит мне спокойствие, так как я заменяю функцию по умолчанию: show action ..

1 Ответ

0 голосов
/ 24 февраля 2012

Я не думаю, что это имеет значение, если вы испортили RESTfulness, возьмите это в качестве руководства для ресурсов, но в конечном итоге маршруты, к которым вы стремитесь, будут более важными, чем соответствие действительно длинным и бессмысленнымRESTful маршруты.

Не все должно быть направлено как подмножество оператора ресурсов в вашем файле маршрутов, не стесняйтесь писать свои маршруты, чтобы фактически обеспечить чистые URL:).

Также вам, безусловно, потребуется модельный метод (как вы указали) для поддержки генерации этих маршрутов.Я не уверен насчет to_url, но я использую to_param (который вспомогательные методы _url и _path автоматически пытаются вызвать, если передан объект [возможно, объект только для AR?]).Переопределите to_param, чтобы вывести слаг, который вы хотели бы использовать в вашем маршруте.

Также на небольшом не по теме комментарию, если вы ищете хорошее дополнение к слаг-генератору, я не могурекомендуем FriendlyId достаточно: https://github.com/norman/friendly_id

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...