:就像在rails routes.rb中一样

Posted

技术标签:

【中文标题】:就像在rails routes.rb中一样【英文标题】::as in rails routes.rb 【发布时间】:2011-06-09 10:26:16 【问题描述】:

config/routes.rb,我都试过了:

root :to => 'things#index', :as => 'things'

root :to => 'things#index'

当我点击http://localhost:3000/ 时,两种方法都有效,似乎没有什么不同。

:as 选项的用途是什么?

【问题讨论】:

【参考方案1】:

:as 选项创建一个命名路径。然后你可以在你的控制器和视图中调用这个路径(例如redirect_to things_path)。这对于根路径不是很有用(因为它已经命名为 root),但对于您添加的新路由非常有用。

【讨论】:

【参考方案2】:

:as 选项形成一个命名路由。

通常用于非根路由。例如:

match '/search' => 'search#search', :as => 'search' # SearchController#search

然后您可以执行以下操作:

<%= link_to search_path, 'Click Here to Search!' %>

search_pathsearch_url 的定义是因为 :as

对于根路由,您实际上并不需要 :as,因为 URL 帮助程序 root_pathroot_url 是由 Rails 为您定义的。

【讨论】:

用于创建路径和 URL 助手!【参考方案3】:

兼容 Rails 4。

path_to_your_app/config/routes.rb

get "/profile/edit" => "users#profile_edit", :as => "edit_me"

从 ruby​​ 2.0 开始,您可以使用:

get "/profile/edit", to: "users#profile_edit", as: "edit_me"

path_to_your_app/app/views/**in 需要查看

<%= link_to "Edit profile", edit_me_path %>

如果您不确定是否需要,请勿使用match

当你在下一个模式中使用它时会产生一个漏洞:

match ':controller/:action/:id'

来自文档:

你不应该在你的路由器中使用match方法 指定 HTTP 方法。如果您想向两者公开您的操作 GET 和 POST,通过添加:[:get, :post] 选项。如果你想暴露 您对 GET 的操作,在路由器中使用 get:

代替:match "controller#action"

做:get "controller#action"

阅读更多:

关于比赛

http://github.com/rails/rails/issues/5964

关于路线映射

http://apidock.com/rails/v4.0.2/ActionDispatch/Routing/Mapper/Base/match

http://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/Base.html

关于一般路线

http://api.rubyonrails.org/classes/ActionDispatch/Routing.html

【讨论】:

以上是关于:就像在rails routes.rb中一样的主要内容,如果未能解决你的问题,请参考以下文章

你必须弄乱 Rails 的“routes.rb”文件吗?

ruby rails_routes_multiple_files.rb

有没有办法在 Ruby on Rails routes.rb 中定义没有“/new”的新操作路径?

如何在 rails 4 中重新加载路由 /config/routes/*?

任何人都可以帮我处理这段代码吗?我需要将其转换为 rails 4 但我不知道如何..(从 rails 2 到 rails 4 的 routes.rb 文件)

(Starter。坚持这一点)生成了Rails项目:缺少config / routes.rb文件