Как настроить и использовать префикс маршрутов Rails

При выполнении маршрутов рейка я вижу:

 Prefix   Verb   URI Pattern                                       Controller#Action
 articles  GET    /articles(.:format)                               articles#index
 new_article GET    /articles/new(.:format)                           articles#new

вместе с некоторыми другими, которых я забыл.

Это связано с тем, что файл routes.rb имеет:

resources :articles

Мой вопрос в том, что именно этот префикс, и как бы я его изменил?

Насколько я понимаю, это ярлык для URI, поэтому в моем приложении я могу просто ссылаться на new_article вместо articles/new? Я действительно ссылаюсь на @new_article или есть какой-то другой формат для ссылки на него.

Второй вопрос, как это изменить? Допустим, я хочу использовать префикс new_document вместо new_article для запроса get на этом URL-адресе. Что бы я поместил в файл routes.rb?

Я просмотрел эту ссылку из направляющих рельсов, но все, что, похоже, показывает, как увеличить URL-адрес, добавив перед ним префикс.

Ответ 1

Дорожки

Я не уверен, почему он называется prefix - он должен называться path helper:

enter image description here

Суть в том, когда вы вызываете таких помощников, как link_to или form_tag и т.д. - им потребуется paths для заполнения различных действий в структуре маршрутизации вашего приложения.

Как Rails одобряет convention over configuration & СУХОЕ программирование, означающее, что если вы можете ссылаться на эти path helpers, используя стандартный urls, это позволит вам сделать одну ссылку & шанс маршрута по мере необходимости

EG

Вызов articles_path гораздо более эффективен, чем обращение к /articles каждый раз


Маршруты

Чтобы правильно ответить на ваш вопрос, вам нужно оценить, что Rails использует resourceful маршрутизацию - в основном это означает, что каждый созданный вами помощник route должен быть определен вокруг любого ресурса в вашем приложении

Из-за MVC-структуры Rails эти ресурсы обычно определяются используемым вами controllers:

#config/routes.rb
resources :articles #-> articles_path etc

Чтобы ответить на ваш вопрос, вы должны понимать, что всегда должны ссылаться на свои ресурсы такими, какие они есть (в вашем случае articles).

Чтобы настроить помощник пути, вам нужно изменить ссылку в файле маршрутов, например:

#config/routes.rb
resources :articles, as: :document, path: "document" #-> domain.com/documents

Это позволяет вам определять настраиваемые маршруты/помощники пути, позволяя вам вызывать их по своему усмотрению

Ответ 2

Он позволяет использовать ярлыки, такие как new_article_path или new_article_url в ваших контроллерах и представлениях. Это очень удобно, когда вы делаете такие вещи, как перенаправление пользователей на определенную страницу или создание динамических ссылок.

Вы можете изменить префикс, добавив параметр as: в файл routes.rb. Например:

GET '/new', to: 'articles#new', as: 'my_new_article`

Это изменит префикс на my_new_article.

Ответ 3

Вы правы, префикс используется для построения именованных маршрутов, поэтому resources method в файле маршрутов создает маршруты типа articles_path, new_article_path и т.д. Чтобы ссылаться на маршрут в вашем коде, добавьте path в префикс, который вы видите, когда running rake routes.

Если вы хотите изменить префиксы, созданные методом ресурсов в файле маршрутов, используйте :as option, например:

resources :articles, as: :posts

Это создаст маршруты, такие как "new_post_path", которые вы можете использовать в своих представлениях.

Если вы хотите изменить маршрут маршрута в браузере, вы можете использовать опцию path:

resources :articles, path: :posts

Что будет генерировать маршруты, такие как /posts/1 or /posts/new вместо /articles/1 or /articles/new, но маршруты будут по-прежнему называться articles_path, new_article_path и т.д. в вашем коде. Вы можете использовать обе опции :path and :as, чтобы изменить как path and the prefix ваших маршрутов ресурсов.

Чтобы изменить основной маршрут в файле маршрутов, вы можете просто использовать :as, например:

get 'messages' => 'messages#index', as: :inbox

Это создаст маршрут inbox_path, который вы можете использовать в своем коде.

Надеюсь, что это поможет!

Ответ 4

Префикс может использоваться с помощниками маршрутов для генерации маршрутов в вашем приложении. Таким образом, в вашем приложении помощник article_path создает маршрут для индексной страницы статей, new_article_path - это маршрут для новой страницы статьи, а article_path (@article) - маршрут для страницы показа для @article.

Чтобы указать другой маршрут, вы можете изменить файл rout.rb на:

resources :articles, as: :documents

Это даст вам:

documents  GET    /articles(.:format)                               articles#index
new_document GET    /articles/new(.:format)                           articles#new

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

Ответ 5

Вы можете сделать что-то вроде этого:

resources :articles do
 collection do
      get  "new"  => "articles#new",  :as => 'new_document'
 end
end

и вы можете использовать его:

link_to "New foo", new_document_path 

или

link_to "New foo", new_document_url

url печатает абсолютный URL (http://server.com/controller/action), а path печатает относительный URL (/controller/action).