Как настроить и использовать префикс маршрутов 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
).