如何设置和使用Rails路由前缀

Fra*_*gio 16 ruby-on-rails ruby-on-rails-4

在运行rake路线时,我看到:

 Prefix   Verb   URI Pattern                                       Controller#Action
 articles  GET    /articles(.:format)                               articles#index
 new_article GET    /articles/new(.:format)                           articles#new
Run Code Online (Sandbox Code Playgroud)

和其他一些我遗漏的人.

这是因为我的routes.rb文件有:

resources :articles
Run Code Online (Sandbox Code Playgroud)

我的问题是这个前缀究竟是什么,我将如何更改它?

根据我的理解,它是URI的快捷方式,所以在我的应用程序中我可以引用new_article而不是articles/new?我真的参考@new_article还是有其他格式来引用它.

第二个问题,我该如何编辑?假设我想要一个名为new_document的前缀而不是new_article用于该URL上的get请求.我会在routes.rb文件中添加什么?

我从rails指南中查看了这个链接,但它似乎显示的是如何通过在它前面添加前缀来使URL更长.

Ric*_*eck 19

路径

我不确定为什么叫它prefix- 它应该被称为path helper:

在此输入图像描述

最重要的是当您调用类似link_toform_tag等的帮助程序时- 他们将需要paths在您的应用程序的路由结构中填充不同的操作.

由于Rails喜欢convention over configurationDRY编程,这意味着如果您可以path helpers使用标准来引用它们urls,它将允许您根据需要提供一个参考和机会路线

例如

电话articles_path远远比引用更强大的/articles每次


路线

要正确回答您的问题,您需要了解Rails使用resourceful路由 - 基本上意味着route您创建的每个帮助应该围绕应用程序中的任何资源进行定义

由于Rails的MVC结构,这些资源通常由controllers您使用的定义:

#config/routes.rb
resources :articles #-> articles_path etc
Run Code Online (Sandbox Code Playgroud)

要回答您的问题,您需要了解您应始终按原样引用您的资源(在您的情况下articles).

要自定义路径助手,您需要更改 routes文件中的引用,如下所示:

#config/routes.rb
resources :articles, as: :document, path: "document" #-> domain.com/documents
Run Code Online (Sandbox Code Playgroud)

这允许您定义自定义路径/路径助手,允许您根据需要调用它们


Ege*_*soz 17

它让你使用快捷键,比如new_article_pathnew_article_url在你的控制器和视图.在执行将用户重定向到特定页面或生成动态链接等操作时,这些功能非常方便.

您可以通过as:在routes.rb文件中添加选项来更改前缀.例如:

GET '/new', to: 'articles#new', as: 'my_new_article`
Run Code Online (Sandbox Code Playgroud)

这会将前缀更改为my_new_article.


Leo*_*lva 7

您还可以为其使用路由范围。在您的routes.rb文件中:

Rails.application.routes.draw do

  # Any other routes here
  scope 'admin' do
    resources :articles
  end
end
Run Code Online (Sandbox Code Playgroud)

/admin/articles并且所有其他与 CRUD 相关的路由都可以使用link_to,表单提交控件等。


小智 6

你是对的,前缀用于构建命名路由,因此resources method在routes文件中创建路由等articles_path, new_article_path.要在代码中引用路由,请添加path到您看到的前缀running rake routes.

如果要更改路由文件中resources方法生成的前缀,请使用:as option,如下所示:

resources :articles, as: :posts

这将生成您可以在视图中使用的'new_post_path'等路线.

如果要在浏览器中更改路径的路径,可以使用以下path选项:

resources :articles, path: :posts
Run Code Online (Sandbox Code Playgroud)

这将生成/posts/1 or /posts/new代替/articles/1 or /articles/new的路由,但路由仍将articles_path, new_article_path在您的代码中命名为etc.您可以使用这两个:path and :as选项来更改两个path and the prefix资源路由.

要更改路径文件中的基本路线,您可以简单地使用:as,如下所示:

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

这将创建您可以在代码中使用的路径inbox_path.

希望有所帮助!