ruby on rails中的"_path"方法是什么?

ele*_*ong 12 ruby ruby-on-rails ruby-on-rails-3

我正在学习RoR,并且我对"_path"方法感到非常困惑,因为它在控制器和路由中使用.更具体地说,我指的是采用语法"(something)_path"的许多不同调用.据我所知,他们似乎都编码或操纵URL或链接.我很难掌握这种方法的使用,因为我无法弄清楚它的核心功能应该是什么.

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

get '/all' => 'tweets#index', as: 'all_tweets'
Run Code Online (Sandbox Code Playgroud)

只有现在才能在.erb文件中使用以下内容.注意行末尾的"_path"代码.

<%= link_to "All Tweets", all_tweets_path %>
Run Code Online (Sandbox Code Playgroud)

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

<p><%= link_to tweet.user.name, edit_tweet_path(@tweet) %></p>
Run Code Online (Sandbox Code Playgroud)

我已经尝试过阅读我的学习资料以及RoR文档,但我总是比起初时更加迷失.有人知道这个"_path"方法的低级定义吗?

Ric*_*eck 17

帮手

它被称为a route helper,这意味着Rails将生成它们以帮助为您提供基于资源的路由结构.我会在一秒钟内解释更多

-

要正确解释--Rails只是一个框架.

与所有软件一样,它是按特定顺序加载的一系列文件.因此,Rails 在启动过程中创建了一系列辅助方法.然后,可以在整个应用程序中使用这些"帮助程序"方法来根据需要调用功能/信息:

Rails框架提供了大量的帮助程序,用于处理资产,日期,表单,数字和模型对象,仅举几例.默认情况下,这些帮助程序可用于所有模板.

除了使用提供的标准模板助手之外,强烈建议创建自定义助手以提取复杂的逻辑或可重用的功能.默认情况下,每个控制器都包含所有帮助程序.这些助手只能通过.helpers在控制器上访问

route帮助程序(从您的config/routes.rb文件生成的帮助程序使您能够调用足智多谋的路由.这些可能看起来很奇怪,但一旦您了解它们,将无情地帮助您.

-

足智多谋

为了让您更清晰 - Rails路由被称为足智多谋

这意味着它们是围绕资源构建的.为了简要说明这一点,您需要了解应用程序的资源是您可以添加到的数据池,以及从中获取的数据.

进一步解释,因为Rails是面向对象的.如果你是新手,这并不是很重要,但要记住,因为当你进入语言/工作时,你会开始明白为什么这很重要.

面向对象的编程将OBJECTS置于流的中心.通常,您将逻辑置于中心,但使用OOP,它就是对象.这对我们来说非常重要,因为这意味着您在Rails中所做的一切都是基于您可以创建的对象.

根据MVC原则(同样是Rails的基础),你将从你的Models 创建/调用你的对象:

在此输入图像描述

这意味着如果要创建一系列到"CRUD"(创建读取更新销毁)对象的路由,Rails就能够创建执行此操作所需的路由.这是resources指令来自routes文件中的位置:

在此输入图像描述

希望这可以帮助!


The*_*Log 11

实际上,这些路径是根据您的routes.rb.如果您在项目中运行此命令,则可以在应用程序上看到所有可用的命令

rake routes
Run Code Online (Sandbox Code Playgroud)

例如,如果我routes.rb像这样声明我的资源

resources :posts
Run Code Online (Sandbox Code Playgroud)

然后我会自动拥有以下可用路径

posts_path
post_path
new_post_path
edit_post_path
Run Code Online (Sandbox Code Playgroud)

如果你使用一些abc_path尚未声明的奇怪的东西routes.rb,那么你会得到错误.

希望这是有帮助的,你肯定需要使用Rails更多地工作,然后最终你会理解所有这些东西:)