什么是Ruby on Rails中的"_path"方法?

24

我正在学习RoR,并且对于在Controllers和Routes中使用的“_path”方法感到非常困惑。更具体地说,我指的是许多不同调用采用“(something)_path”的语法。据我所知,它们似乎都编码或操作URL或链接。由于我无法弄清楚它的核心功能是什么,因此我很难掌握这种类型的方法。

例如,我可以在我的config/routes.rb文件中使用以下代码将旧的URL结构重定向到列出Tweet实例的页面:

get '/all' => 'tweets#index', as: 'all_tweets'

现在我才能在.erb文件中使用以下内容。请注意行末的“_path”代码。

<%= link_to "All Tweets", all_tweets_path %>

我还可以使用以下代码创建到不同 .erb 文件中的编辑页面(和另一个操作)的链接:

<p><%= link_to tweet.user.name, edit_tweet_path(@tweet) %></p>

我尝试阅读我的学习资料和RoR文档,但我总是比开始时更加迷茫。有人知道这个"_path"方法的低级定义吗?

3个回答

28

助手

它被称为“路由助手”,这意味着Rails会生成它们来帮助您提供基于资源的路由结构。我马上会解释更多。

--

To explain properly - Rails is just a framework.
像所有软件一样,Rails是按特定顺序加载的一系列文件。因此,在启动过程中,Rails创建了一系列helper方法。这些“helper”方法可以在整个应用程序中使用,以根据需要调用功能/信息:
引用: Rails框架为处理资产、日期、表单、数字和模型对象等提供了大量的辅助工具。默认情况下,所有模板都可以使用这些辅助工具。 除了使用提供的标准模板助手之外,强烈鼓励创建自定义助手来提取复杂逻辑或可重用功能。默认情况下,每个控制器将包括所有助手。这些助手只能通过.helpers在控制器上访问。
路由助手(从您的config/routes.rb文件生成)使您能够调用资源路由。这些可能一开始看起来很奇怪,但一旦您理解了它们,就会帮助您不断前进。

--

足智多谋

为了让你更清楚 - Rails路由被称为“足智多谋

这意味着它们是围绕资源构建的。简单定义一下,你需要明白应用程序的资源是可以添加和提取数据的数据池。

进一步解释一下,因为Rails是面向对象的。如果你是新手,这可能意义不大,但请记住,当你在语言/工作中进展时,你将开始看到为什么这很重要。

面向对象编程将对象放在流程的中心。通常,你会把逻辑放在中心位置,但是在OOP中,是对象。这对我们来说非常重要,因为它意味着你在Rails中所做的一切都是基于你可以创建的对象。

根据MVC原则(再次强调,这是Rails构建的基础),您将从您的Model中创建/调用对象:

enter image description here

这意味着如果你想创建一系列用于“CRUD”(创建、读取、更新和删除)对象的路由,Rails 可以创建必要的路由。这就是在路由文件中使用 resources 指令的原因所在:

enter image description here

希望这有所帮助!

20

实际上,这些路径是基于你的routes.rb生成的。如果你在项目中运行此命令,你将能够看到所有在你的应用程序中可用的内容。

Actually, these paths are generated based on your routes.rb. If you run this command in your project, you'll be able to see all the available content in your app.

rake routes
例如,如果我像这样在 routes.rb 中声明我的资源。
resources :posts

那么我将自动拥有以下可用路径

posts_path
post_path
new_post_path
edit_post_path

如果您在routes.rb中没有声明过一些奇怪的abc_path,那么就会出现错误。

希望这有帮助,您肯定需要更多地使用Rails,最终您将理解所有这些东西 :)


非常感谢您让我感到简单。那些四个(列出所有、显示一个、创建、更新)是唯一创建的四个“_path”方法吗? - elersong
没错,你可以尝试在你的routes.rb文件中添加resources :posts,然后运行rake routes来查看生成的不同方法 :) - The Lazy Log

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接