Вставьте динамическое значение (имя категории) в качестве пространства имен в маршруте - PullRequest
1 голос
/ 27 сентября 2019

У меня есть ресурс под названием статьи.Помимо заголовка, автора и контента, у него есть поле с именем category, которое само по себе является другим ресурсом.У меня не было отношений один ко многим, но я мог.То, что я хотел бы сделать, это вставить название категории перед заголовком статьи, разделенное косой чертой, как показано ниже.Предположим, что одной из категорий является «технология».

example.com / article / technology / some-article-title-slug

Я попытался создать технологию «slug» / some-article-title"Слаги", но рельсы избежали косой черты.И я не хочу, чтобы там было слово «категория», с которым рельсы можно легко сделать:

resources: categories do
  resources: articles
end

, в результате чего example.com/categories/1/articles/some-article-title-slug

И превращение имени категории в слаг будет следующим: example.com/categories/technology/articles/some-article-title-slug

Не очень приятно.

Так как можноЯ получаю:

example.com / articles / technology / some-article-title-slug

1 Ответ

0 голосов
/ 27 сентября 2019

Если у кого-то возникнет тот же вопрос, вот как я его решил.Я сделал собственный маршрут, действие контроллера и просмотр для каждой категории.И сделал собственный маршрут для каждой страницы показа категории, но использовал статьи показать действие и представление.Это прекрасно работает, если количество категорий мало.Если, например, ресурс статей имеет две категории: технология и экономика, файл маршрутов будет выглядеть следующим образом:

# config/routes.rb
get 'articles/technology/:id', controller: 'articles', action: 'show', as: 'technology_article'
get 'articles/economics/:id', controller: 'articles', action: 'show', as: 'economics_article'
resources :articles do
  get :technology, on: :collection
  get :economics, on: :collection
end

В контроллере статей я добавляю действие для технологии и одно для экономики.

def technology
  @articles = Article.where(category: "technology").order(created_at: :desc)
end
def economics
  @articles = Article.where(category: "economics").order(created_at: :desc)
end

И в представлениях статей я добавляю страницы представления с именами technology.html.erb и economics.html.erb, которые настроены как стандартная страница Rails index.html.erb, за исключением того, что они включают имя категории в верхней части.

Ссылки на эти страницы будут использовать technology_articles_path и economics_articles_path.А ссылки на отдельные технологические статьи будут использовать technology_article_path (article.id).

Все статьи, независимо от категории, будут использовать одно и то же действие и контроллер show.

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