2017-02-23 3 views
1

У меня есть следующая задача:ROR: Динамически генерировать URL для «новых» действий на основе атрибута

  1. Есть категории событий.
  2. Я создаю событие только с передачей идентификатора категории в «новое» действие событий.
  3. Мне нужно скрыть URL-адрес «нового» действия (что похоже на/event? Category_id = 1) за slug, которое основано на названии категории. Как этот/large_event,/small_event. Это означает, что передача идентификатора категории «Большие события» должна показывать пользовательскую «новую» форму события с/large_event URL

Я попытался сделать это, используя дружественный драгоценный камень. Может быть, я что-то пропустил, но это позволяет сделать пулю для модели. Но мне нужно сделать slug только для «нового» действия для одной модели, основанной на атрибуте другой модели.

Количество категорий может варьироваться - жесткое кодирование не является вариантом. Есть ли какой-либо изящный способ сделать это?

+0

Посмотрите на документы для маршрутизации http://edgeguides.rubyonrails.org/routing.html –

+0

@KcUS_unico, я нашел один способ - slug category и сделать событие вложенным ресурсом. Я позволю мне иметь URL-адреса, например/small_category/events/new. Но мне придется переписать уже проверенный код. Любые другие идеи? –

ответ

0

Я использовал две вещи для реализации этого: 1. Жесткий идентификационный камень для создания пули для категорий и создания для них следующих URL-адресов, чтобы пользователи имели доступ к «новому» действию. 2. Ограничения маршрута Rails с регулярным выражением. Похоже

get "arenda/:category_slug" => 'auctions#new', constraints: { category_slug: /\w+/ } 

И чтобы закончить его - я создал надлежащий контроллер отфильтровывать несогласованный Params и поиск по слизню.

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